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 では、すべての数字が等しく作成されるわけではありません (しゃれが意図されています)。

10 進数 ( 0.0, ) は、浮動小数点演算のIEEE 754-2008 標準3.0に従います。

標準では、算術フォーマットが定義されています。2 進および 10 進の浮動小数点データのセットで、有限数 (符号付きゼロと非正規数を含む)、無限大、および特別な「非数」値 ( NaNs )で構成されます。

整数( 03) は整数として扱われます。

NaNInfinity(および ) は両方とも、-Infinityそのような float が処理するように設計されている特殊なケースですが、整数は処理されないため、エラーが発生します。

于 2011-10-11T13:26:31.980 に答える
3

3.0/0 が無限に等しい理由は、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 に答える