我已经尝试过分裂的奇怪行为。
some_nbr / 0 # >> ZeroDivisionError with 0 (Integer)
some_nbr / 0.0 # => NaN with 0.0 (Float)
当然,除以0是不好的,但是我想弄清楚为什么用Integer
进行除零会导致异常,而对浮点数进行相同处理只会返回{ {1}}。
答案 0 :(得分:4)
NaN
和Infinity
"有效"浮点值,在某种意义上,包含float的内存地址可以表示这些值。这是ruby采用的更一般IEEE standard的一部分。
相比之下,NaN
或Infinity
对整数没有有效的表示,因此抛出异常是合适的。
答案 1 :(得分:1)
整数0
正好为零;没有错误。并且由于除以零在数学上是未定义的,因此0
的整数除法会产生错误。
另一方面,float 0.0
不一定代表零。它可能源自一个数字,其绝对值足够小,可以舍入为零。在这种情况下,仍然定义了数学划分。当除数的绝对值很小时,突然发出错误是没有意义的。但是,在这种情况下,由于值被舍入而无法再现有意义的值,因此可以做的最好的事情就是返回某种伪数字,例如NaN
。