Int和Double的区别以及除以零异常

6

当整数被零除时,我们会得到编译时错误,而在双精度浮点数的情况下,没有编译错误,但在运行时我们得到无穷大/NaN作为结果。有没有想法为什么整数和双精度浮点数在除以零异常时有不同的行为?

void Main()
{
    int number = 20;
    var result1 = number/0; // Divide by zero compile time exception

    double doubleNumber = 20;
    var result2 = doubleNumber/0.0; // no compile time error. Result is infinity or NaN
}

2
因为这就是两个数字系统的数学定义。 - Marc Gravell
仅仅因为在整数中没有无穷大/负无穷大/非数字的等价物。浮点数运算与整数运算有很大的不同。 - Robert Rouhani
3个回答

8
因为这就是它定义的方式。而对于整数来说,没有无穷大和NaN的特殊值,所以如果编译器在编译时能够发现问题,它会抛出错误。

2

从理论上讲,除以零应该得到无穷大,但整数数据类型没有任何表示无穷大的方法。双精度数据类型可以表示无穷大,因此在这种情况下不需要抛出异常。


1

由于其数学背景,浮点数可以定义为无穷大,但整数不能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接