From: Yusuke ENDOH Date: 2008-09-04T23:46:45+09:00 Subject: [ruby-dev:36159] some odd behaviors of BigDecimal 遠藤です。 BigDecimal のテストを書いていて、いくつか気になる挙動がありました。 1) Infinity の n 乗が常に NaN になるのは意図的でしょうか。 ruby19 -rbigdecimal -e 'x = BigDecimal("Infinity"); p [x**1, x**0, x**-1]' [#, #, #] inf ** 0 が NaN になるのは定義次第だと思いますが、** 1 と ** -1 は それぞれ inf と 0 を期待していました。 Float だと以下のようになります (うちの環境の場合) 。 $ ruby19 -e 'x = 1.0/0.0; p [x**1, x**0, x**-1]' [Infinity, 1.0, 0.0] 2) 1E1000..(0 がいっぱい)..000 を BigDecimal に与えると 0 が返るのは意図的 でしょうか。 $ ruby19 -rbigdecimal -e 'p BigDecimal("1E1" + "0" * 10000)' # Float だと Infinity になります。 $ ruby19 -e 'p ("1E1" + "0" * 10000).to_f' Infinity 3) limit(1) で 3 ** 4 を計算すると 90 になりますが意図的でしょうか。 $ ruby19 -rbigdecimal -e 'BigDecimal.limit(1); p BigDecimal("3") ** 4' # ちゃんと追ってないですが、3 * 3 * 3 * 3 = 10 * 3 * 3 = 30 * 3 = 90 と なっているのかなあと思います。仕様だと言われれば納得します。 -- Yusuke ENDOH