如果除以0,我会得到ZeroDivisionError,Infinity或NaN,具体取决于划分的内容。
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无穷大?为什么划分整数会引发异常,但划分浮点数不会?
答案 0 :(得分:9)
在Ruby中,并非所有数字都是相同的(双关语)。
十进制数字(0.0
,3.0
)遵循IEEE 754-2008 standard进行浮点运算:
标准定义 算术格式:二进制和十进制浮点数据集,由有限数(包括有符号零和次正规数),无穷大和特殊“非数字”值组成( NaNs < /强>)
整数(0
,3
)被视为整数。
NaN
和Infinity
(以及-Infinity
)都是特殊情况,这些浮点数旨在处理,但整数不是 - 因此是错误。
答案 1 :(得分:3)
3.0 / 0等于Infinity的原因是Ruby实现的IEEE 754规范(浮点运算标准)。
http://weblog.jamisbuck.org/2007/2/7/infinity
http://en.wikipedia.org/wiki/IEEE_754
顺便说一句,我发现这张桌子非常有趣:http://users.tkk.fi/jhi/infnan.html