まつもと ゆきひろです

In message "[ruby-math:00795] Re: Rational#to_f"
    on 02/12/18, masaki <GEC01122 / nifty.ne.jp> writes:

|Bignum#to_f の bug です。

がーん。

|((2**76).div(2731)).to_f =>27666738823110336512.0
|
|正しくは
|
|class Bignum
|  def to_f
|    n=abs.log2floor - 52
|    if n < 0
|      Math.ldexp(self,0)
|    else
|      Math.ldexp((self*2+2**n) >> n+1,n)
|    end
|  end
|end
|
|((2**76).div(2731)).to_f =>27666738823110332416.0

おっしゃることは分かるのですが、52というマジックナンバーを導
入したくないのです。どうするのが一番良いでしょうね。