From: Yusuke ENDOH Date: 2008-09-18T02:17:23+09:00 Subject: [ruby-dev:36358] Re: some odd behaviors of BigDecimal 遠藤です。 2008/09/04 23:46 Yusuke ENDOH : > 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 と > なっているのかなあと思います。仕様だと言われれば納得します。 返事がなかったので、とりあえずすべて意図的と見なしたテストを コミットしました。(r19401) -- Yusuke ENDOH