けいじゅ@日本ラショナルソフトウェアです. In [ruby-math:00792] the message: "[ruby-math:00792] Re: Rational#to_f", on Dec/17 02:37(JST) masaki writes: >正木です。 >石塚さんの code 拝見しました。([ruby-math:00790] Re: Rational#to_f ) >早速試してみましたが >(1/n).to_f が n=2731,4623,5462,5607,5963,6147,9246,・・・ >の場合に正しい値を返しません。これらは 1.0/n が間違った値を返す n と >一致します。 >これは Math.ldexp に渡す値が必要(53 bit)以上の精度を持つせいと思われ >ます。 うーん. 難しいなぁ... >Math.ldexp という method があることに気づきませんでしたが、私の code >も次のように書いた方がすっきりしそうです。 > >class Rational > def to_f # for intel 64 bit floating point > m,n=52,1023 > e=abs.log2floor > if e > m-n > Math.ldexp((self*2**(m-e)).round,e-m) > else > Math.ldexp((self*2**n),-n) > end > end >end 正木さんのをRational#to_fに正式採用しようと思っていますが, 1つ質問 m,n = 53,1023 の 1023 はどういう意味ですか? __ ..............................石塚 圭樹@日本ラショナルソフトウェア... ----------------------------------->> e-mail: keiju / rational.com <<---