【问题标题】:Why in Ruby 0.0/0, 3.0/0 and 3/0 behave differently?为什么在 Ruby 0.0/0、3.0/0 和 3/0 中表现不同?
【发布时间】:2011-10-11 13:15:10
【问题描述】:

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

【问题讨论】:

    标签: ruby integer-division divide-by-zero


    【解决方案1】:

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

    十进制数(0.03.0)跟在IEEE 754-2008 standard 后面,用于浮点运算:

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

    整数(03)被视为整数。

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

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-05
        • 2022-11-03
        • 1970-01-01
        • 2011-07-22
        • 2021-05-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多