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

标签 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

我知道 0.0/0 不是无穷大(在数学术语中),而 3.0/0 是,但为什么 3/0 不是无穷大?为什么除以整数会抛出异常而除以 float 却不会?

最佳答案

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

十进制数(0.03.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)

整数(03)被视为整数。

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

关于ruby - 为什么在 Ruby 0.0/0、3.0/0 和 3/0 中表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7726615/

相关文章:

math - 当我除以零时会发生什么?

c# - Int vs Double 和除以零异常

ruby - 如何从 Ruby 中调用 Windows DLL?

ruby-on-rails - Rails::Raltie:创建 Rails 3 gem 时遇到问题

64-bit - 如何将 128 位被除数除以 64 位除数,其中被除数的位均为 1,而我只需要商的 64 LSB?

python - 函数迭代的问题

ruby - 如何从 Rails 3 中的二维数组中查找记录?

ruby-on-rails - Rails - 如何为事件分配预订编号

c++ - 数组中的订单号

php - sql查询中变量的任何值避免被零除错误