为什么在Ruby 0.0/0,3.0/0和3/0中表现不同?

Evg*_*nev 4 ruby integer-division divide-by-zero

如果我除以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
Run Code Online (Sandbox Code Playgroud)

我知道0.0/0不是无限(用数学术语),而3.0/0是为什么那么为什么不是3/0无穷大?为什么划分整数会引发异常,但划分浮点数不会?

nam*_*uol 9

在Ruby中,并非所有数字都是相同的(双关语).

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

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

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

两者NaNInfinity(以及-Infinity)都是这种浮点数设计用于处理的特殊情况,但整数不是 - 因此是错误.