From: TAKANO Mitsuhiro Date: 2008-10-05T22:30:49+09:00 Subject: [ruby-dev:36668] Re: [IA-64]BigDecimal#sqrt の仕様 たびたびすみません。 たかのです。 Yukihiro Matsumoto さんは書きました: > まつもと ゆきひろです > > In message "Re: [ruby-dev:36662] Re: [IA-64]BigDecimal#sqrt の仕様" > on Sat, 4 Oct 2008 14:41:21 +0900, TAKANO Mitsuhiro writes: > > |MacBook(x86_64)環境で動かしてみたらFailしてしまいました・・・orz > |(たまたまうまく動いてしまう環境もあるのかしら。) > > うーむ。 > なぜかまたFailしてました・・・ @ i386 orz > |精度の小さいところの差を取ったものと精度の大きいところの差を取って比較し > |たほうが > |確実と考え、以下のように書き換えました。たびたびすみません。 > > 絶対値をとればいいのかしら・・・と考えましたが、面倒なので、 BigDecimal_sqrt のソース通りに有効数字を比較するように修正しました。 > 了解です。ただ、いただいたパッチ(前回もですが)の行頭スペース > が全部消えている上に折り返してしまっているようです。パッチを > 投稿される場合には、その辺に注意していただけるとさいわいです。 > うひょ。すみません。Terminal.appからsvn diffをコピったらそうなっちゃいま した・・・ 今度はMacVimで開き直してからコピーしてみました。 # irbでx64とi386の確認をし、確実に大きな幅があることを確認しましたので # 大丈夫なはずです。ほんとにたびたびすみません。 >> x = BigDecimal.new((2**100).to_s) => # >> x.sqrt(300).precs => [16, 324] >> x.sqrt(1200).precs => [16, 1224] Index: test/bigdecimal/test_bigdecimal.rb =================================================================== --- test/bigdecimal/test_bigdecimal.rb (revision 19688) +++ test/bigdecimal/test_bigdecimal.rb (working copy) @@ -466,9 +466,7 @@ x = BigDecimal.new("0.09") assert_in_delta(0.3, x.sqrt(1), 0.001) x = BigDecimal.new((2**100).to_s) - assert_equal(1125899906842624, x.sqrt(100)) - assert_equal(1125899906842624, x.sqrt(200)) - assert_equal(1125899906842624, x.sqrt(300)) # I don't understand the meaning of argument... + assert_equal(true, x.sqrt(300).precs.last < x.sqrt(1200).precs.last) x = BigDecimal.new("-" + (2**100).to_s) assert_raise(FloatDomainError) { x.sqrt(1) } x = BigDecimal.new((2**200).to_s)