From: "H.Yamamoto" Date: 2004-05-14T19:49:07+09:00 Subject: [ruby-dev:23512] Re: [BUG] numeric.c (flo_to_s) broken? 山本です。 nobu.nakada@nifty.ne.jp wrote: (2004/05/14 17:13) >doubleの全ビットを仮数とした場合に取りうる最大桁数の近似ですか >ら、これを越えるDBL_DIGを持つ内部表現はないと思います。 現実的にはないと思うのですが、int が 0 から INT_MAX までを 欠けることなく全部表現しなくてはならないのに対して、double は 3.130000000000000000344444 ~~~~~~~~~~~~~~~~ ここは常に0 とか、 1.122335566 (IEEE の 1.2356 に対応。それぞれの桁を2重にする) とか、原理的には sizeof(double) * 3 を超える有効桁もありうるので、 何らかの理由で超えてしまうことを心配していました。 ///////////////////////////////////////////////////////////////////// matz@ruby-lang.org (Yukihiro Matsumoto) wrote: (2004/05/14 17:23) >いや、frexpを使えばポータブルに取り出せます。問題はこれは2進 >ベースということですね。 m * (2 ** n) を M * (10 ** N) に変換しなくてはいけないので、大変そうです。 私のパッチのメリットは、 - 浮動小数点演算(fmod)よりは、文字列処理の方が速そう - 浮動小数点演算は誤差が入るので、最初に sprintf して文字列処理で済ますほうが 正確そう - DBL_DIG != 15 な環境でも 1.0e-20 などの表示が 9.999999... とかならないはず 確かめたわけではないので、間違っているかもしれませんが・・・