From: TAKANO Mitsuhiro Date: 2008-09-30T15:01:43+09:00 Subject: [ruby-dev:36629] Re: [IA-64]BigDecimal#sqrt の仕様 高野です。 > いずれも異なる値が帰っているのですが、 すみません、IA-64とx64は同じ値が返っています。 orz TAKANO Mitsuhiro さんは書きました: > こんにちは > 高野です。 > > IA-64のメンテをしているのですが、BigDecimal#sqrtのテストでFailしており、 > その原因がよくわかりません。 > 識者の方のご意見がいただければと思い、メールさせていただきます。 > > テストのコードは > ---- > x = BigDecimal.new((2**100).to_s) > assert_equal(1125899906842624, x.sqrt(1)) > assert_equal(1125899906842624, x.sqrt(2)) > assert_equal(1125899906842624, x.sqrt(3)) # I don't understand the > meaning of argument... > ---- > という部分で、実行時のログは以下の通りです。 > > http://www.atdot.net/sp/readonly/1coz7k_takano32 > ---- > > 5) Failure: > test_sqrt_bigdecimal(TestBigDecimal) [/home/takano/ruby/test/bigdecimal/test_bigdecimal.rb:469]: > Expected 1125899906842624, not #. > ---- > > 引数の値が異なるのに同じ値と比較しているのがいけないのかな?と考え、 > 他のプラットフォームでも以下のようなコードで実行してみました。 > ---- > require 'bigdecimal' > puts BigDecimal.new( (2**100).to_s ).sqrt(1) > puts BigDecimal.new( (2**100).to_s ).sqrt(2) > puts BigDecimal.new( (2**100).to_s ).sqrt(3) > ---- > > > まずはわれらが(?)IA-64です。 > ruby 1.9.0 (2008-09-30 revision 19570) [ia64-linux] > ---- > 0.112589990684262399999999999999999975E16 > 0.112589990684262399999999999999999975E16 > 0.112589990684262399999999999999999975E16 > ---- > > 次に x64 です。 > ruby 1.8.6 (2007-09-24 patchlevel 111) [x86_64-linux] > ---- > 0.112589990684262399999999999999999975E16 > 0.112589990684262399999999999999999975E16 > 0.112589990684262399999999999999999975E16 > ---- > > 最後に IA-32 です。 > ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-linux] > ---- > 0.1125899906842624E16 > 0.1125899906842624E16 > 0.1125899906842624E16 > ---- > > いずれも異なる値が帰っているのですが、 > revision 19633 > http://www.rubyist.net/~akr/chkbuild/debian-sarge/ruby-trunk/log/20080930T132601.txt.gz > では単純にFixnumとの比較でパスしているようです。 > # IA-64では精度があがったので、比較する桁数が多くなっている? > > 自分はあまりここらへんのことに詳しくないので、識者の方のご意見が伺えればと > 思い、連絡させていただきました。 > # ちょっとおっくうで、IA-64以外のtrunkの環境を作っていないのが申し訳ない > # ところなのですが、深みに入るようでしたら、環境を作っておこうと思います。 > > 何かお分かりの方がいらっしゃいましたら、よろしくお願いします。 > >