如果我除以 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 不是无穷大?为什么除以整数会抛出异常而除以 float 却不会?
最佳答案
在 Ruby 中,并非所有的数字都是平等的(双关语)。
十进制数(0.0
、3.0
)在IEEE 754-2008 standard 之后对于浮点运算:
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)
整数(0
、3
)被视为整数。
NaN
和Infinity
(以及-Infinity
)都是此类 float 旨在处理的特殊情况,但整数不是-- 因此错误。
关于ruby - 为什么在 Ruby 0.0/0、3.0/0 和 3/0 中表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7726615/