ZeroDivisionError异常,带整数,Nan带浮点数

时间:2014-05-08 23:35:30

标签: ruby floating-point division integer-division

我已经尝试过分裂的奇怪行为。

 some_nbr / 0    # >> ZeroDivisionError with 0 (Integer)
 some_nbr / 0.0  # => NaN with 0.0 (Float)

当然,除以0是不好的,但是我想弄清楚为什么用Integer进行除零会导致异常,而对浮点数进行相同处理只会返回{ {1}}。

2 个答案:

答案 0 :(得分:4)

NaNInfinity"有效"浮点值,在某种意义上,包含float的内存地址可以表示这些值。这是ruby采用的更一般IEEE standard的一部分。

相比之下,NaNInfinity对整数没有有效的表示,因此抛出异常是合适的。

答案 1 :(得分:1)

整数0正好为零;没有错误。并且由于除以零在数学上是未定义的,因此0的整数除法会产生错误。

另一方面,float 0.0不一定代表零。它可能源自一个数字,其绝对值足够小,可以舍入为零。在这种情况下,仍然定义了数学划分。当除数的绝对值很小时,突然发出错误是没有意义的。但是,在这种情况下,由于值被舍入而无法再现有意义的值,因此可以做的最好的事情就是返回某种伪数字,例如NaN