4

如果我除以 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 不是无穷大?为什么除以整数会引发异常,但除以浮点数不会?

4

2 回答 2

9

在 Ruby 中,并非所有数字都是平等的(双关语)。

十进制数 ( 0.0, 3.0) 遵循IEEE 754-2008浮点运算标准:

该标准定义了算术格式:二进制和十进制浮点数据集,由有限数(包括有符号零和次正规数)、无穷大和特殊的“非数字”值 ( NaNs )组成

整数 ( 0, 3) 被视为整数。

NaNInfinity(以及)都是-Infinity这种浮点数旨在处理的特殊情况,但整数不是 - 因此是错误。

于 2011-10-11T13:26:31.980 回答
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

于 2011-10-11T13:29:21.550 回答