From: "H.Yamamoto" Date: 2004-05-08T14:15:23+09:00 Subject: [ruby-dev:23482] Re: [BUG] numeric.c (flo_to_s) broken? 山本です。 Index: numeric.c =================================================================== RCS file: /ruby/ruby/numeric.c,v retrieving revision 1.101.2.5 diff -u -w -b -p -r1.101.2.5 numeric.c --- numeric.c 7 May 2004 08:48:20 -0000 1.101.2.5 +++ numeric.c 8 May 2004 05:06:28 -0000 @@ -501,7 +501,7 @@ flo_to_s(flt) avalue = fabs(value); if (avalue < 1.0e-7 || avalue >= 1.0e15) { - fmt = "%.16e"; + fmt = "%.14e"; } sprintf(buf, fmt, value); if (!(e = strchr(buf, 'e'))) { としたら、改善されました。(有効15桁なので、小数点以下14桁と判断) E:\ruby-cvs\ruby_1_8>miniruby -e "p 0.000000001" 1.0e-09 E:\ruby-cvs\ruby_1_8>miniruby -e "p 0.00000000001" 1.0e-11 ただ、まだ E:\ruby-cvs\ruby_1_8>miniruby -e "puts 1.0000000001e-5" 0.000010000000001 E:\ruby-cvs\ruby_1_8>miniruby -e "puts 1.0000000001e-7" 0.0000001 となって、後のほうは有効桁が正しくないようです。 avalue < 1.0e-7 || avalue >= 1.0e15 なら指数表示(e)で、そうでなければ 小数表示(f)で、ともに有効15桁。ただし、小数点以下の余分な0は削除する という仕様で間違いないでしょうか?この仕様でトライしてみようと思っています。