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

问题描述 投票:1回答:2

我用分裂试验了一种奇怪的行为。

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

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

ruby floating-point division integer-division
2个回答
1
投票

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

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


4
投票

NaNInfinity是“有效”浮点值,在某种意义上,包含浮点数的内存地址可以表示这些值。这是红宝石采用的更为一般的IEEE standard的一部分。

相比之下,NaNInfinity与整数没有有效的表示,因此抛出异常是恰当的。

© www.soinside.com 2019 - 2024. All rights reserved.