【发布时间】:2018-02-23 09:39:29
【问题描述】:
这是代码:
class Program
{
static void Main(string[] args)
{
double varrr = Divide(10, 0);
}
static double Divide(double a, double b)
{
double c = 0;
try
{
c = a / b;
return c;
}
catch (DivideByZeroException)
{
Console.WriteLine("Division by zero not allowed");
return 0;
}
}
}
我希望除以零会抛出DivideByZeroException,但它没有,当我在控制台上打印结果时,输出是“Infinity”。这是为什么呢?
【问题讨论】:
-
那是整数。
-
添加了c#。也许乔恩·斯基特会来。
-
"除以零的结果在数学上是未定义的,可以用浮点数/双精度表示(如 NaN - 不是数字),但是,它不是,在任何基本意义上都是错误的。由于整数必须包含特定的数值,因此在处理它们时必须在除以零时引发错误。“我虽然在 Java 的上下文中看到了这个解释,但我相信同样是也适用于 c#
-
“为什么”的问题很难回答。您是在问“规范的哪一行定义了这种行为?”还是“谁编写了规范的那一行?”或“IEEE 浮点格式的历史是什么?”或“什么设计考虑使双算术和整数算术不同?”或者是什么?回答这些问题中的任何一个都可以合理地回答“为什么”世界是这样的,而且它们都是不同的。 问一个更精确的问题。