From: TAKANO Mitsuhiro Date: 2008-12-11T11:04:56+09:00 Subject: [ruby-dev:37370] IA-64とx64でBigDecimalの割り算の計算結果がおかしい -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 高野です。 IA-64とx64でBigDecimalの割り算の計算結果がおかしいです。 - ---- 1) Failure: test_power(TestBigDecimal) [/home/takano/ruby/test/bigdecimal/test_bigdecimal.rb:585]: <0.0123456790123457> expected but was <#>. - ---- 0.1234567912 3456791234 5679123456 7912345679 1234567912 345679E-1 は $ ./ruby -rbigdecimal -e 'x = BigDecimal.new("3");p (x ** -4)' の結果なのですが、これを電卓やx86で計算すると 確かに 0.0123456780 123456780 123456780 ... という値になります。 BigDecimalにはあまり詳しくないのですが、少しソースコードを読んでみたとこ ろ、 x ** 4 を やってから 1 / (x ** 4) をしている、つまり乗算してから 除算しているようです。 具体的にはVpPowerしてからsignが負なら VpDivd(w1, w2, VpConstOne, y); を結果とするようなソースコードになっていました。どうやら、このVpDivdの中 身があやしいようです。 もう少し、読みすすめていったところ、"ext/bigdecimal/bigdecimal.c" 3395 行目あたりのループで桁ひとつ分短い気がしています。 自力ではここまでが限界でした。(苦笑 もしかしたら↑の読み方も間違っているかもしれません。 よく分かってなくて恐縮なのですが、どなたか64ビットに依存してそうな部分な どが見つかりそうでしたらよろしくお願いします。 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAklAdwoACgkQzTee3rzDvxEskQCgqayGPbrCP6CS/WsDpNCoboIw bVUAn1Olp9VpyO9Uy7xCAfPVQh+7XwPf =ygR5 -----END PGP SIGNATURE-----