From: nobu.nakada@... Date: 2003-04-29T01:25:08+09:00 Subject: [ruby-dev:20109] Re: Roundoff problem with Float and Marshal --Multipart_Tue_Apr_29_01:25:07_2003-1 Content-Type: text/plain; charset=ISO-2022-JP なかだです。 At Mon, 28 Apr 2003 13:11:26 +0900, Tanaka Akira wrote: > > Bignum#to_fも誤差を含んでるようです。 > > $ ruby -e 'p 39560152763386141.to_f' > > 3.9560152763386144e+16 > > この例はちと違うんじゃないかと思います。 > > 39560152763386141 は > 0b10001100100010111011111111010100101110001100100100011101 > なので 56bit あるわけですが、IEEE754 の倍精度は仮数部 53bit なので下位 > 3bit の 0b101 を丸める必要があって、これは 0b1000 の半分よりも大きいの > で繰り上がりになり、 > 0b10001100100010111011111111010100101110001100100100100 * 2**3 > となって、これは to_f で求まった > 3.9560152763386144e+16 > つまり > 0b1.0001100100010111011111111010100101110001100100100100 * 2**55 > そのものなのではなかろうか、ということですが。 たしかに。 > Bignum#to_f は基数の変換をするわけではないので、危ないのは複数回の丸め > が起きる場合ですかね。つまり、BITSPERDIG の倍数の中で 53bit 以上のもの > のうち最小のもの (というのは、とある環境では 64bit) 以下では面白いこと > は起きないんじゃないかと思います。 exponentを掛けたときに、必要な精度が増えそうな気がします。 強引にBignumで桁数を増やして精度を確保するというのを試してみま したが、あまりにも遅すぎなのでもう少し工夫が要りそうです。 --Multipart_Tue_Apr_29_01:25:07_2003-1 Content-Type: text/x-diff; type=gzip; charset=US-ASCII Content-Disposition: attachment; filename="strtod.diff.gz" Content-Transfer-Encoding: base64 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 --Multipart_Tue_Apr_29_01:25:07_2003-1 Content-Type: text/plain; charset=ISO-2022-JP -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦 --Multipart_Tue_Apr_29_01:25:07_2003-1--