Why in Ruby 0.0/0, 3.0/0 and 3/0 behave differently?
如果除以0,就得到零分误差,无穷大或NaN,这取决于被除以的内容。
1 2 3 4 5 6 7 8 | ruby-1.9.2-p180 :018 > 0.0 / 0 => NaN ruby-1.9.2-p180 :020 > 3.0 / 0 => Infinity ruby-1.9.2-p180 :021 > 3 / 0 ZeroDivisionError: divided by 0 |
我知道0.0/0不是无穷大(用数学术语来说),而3.0/0是无穷大,但为什么3/0不是无穷大呢?为什么整数的除法会引发一个异常,而浮点的除法却不会呢?
在Ruby中,并不是所有的数字都是相等的(双关语是故意的)。
十进制数(
The standard defines
arithmetic formats: sets of binary and decimal floating-point data, which consist of finite numbers (including signed zeros and subnormal numbers), infinities, and special"not a number" values (NaNs)
整数(
3.0/0等于无穷大的原因是Ruby实现的IEEE754规范(浮点算术标准)。
http://weblog.jamisbuck.org/2007/2/7/infinity网站
http://en.wikipedia.org/wiki/ieee_
顺便说一句,我觉得这个表很有趣:http://users.tkk.fi/jhi/infnan.html