From: nobu.nakada@... Date: 2004-05-14T17:13:23+09:00 Subject: [ruby-dev:23508] Re: [BUG] numeric.c (flo_to_s) broken? なかだです。 At Fri, 14 May 2004 14:34:41 +0900, H.Yamamoto wrote in [ruby-dev:23507]: > >多少余っても問題ないでしょうし、 > > > > buf[sizeof(double)*CHAR_BIT*3/10+sizeof(int)*3+20] > > > >でいいんじゃないでしょうか。 > > 私も最初、sizeof(double) から double の桁数が求まると思ったのですが、 > > http://www.ep.sci.hokudai.ac.jp/~yukiko/work/gtool/netCDF.htm によると > > IEEE形式ではない浮動小数点バイナリも存在するらしく、浮動小数点数が > どう格納されているか保証がないので、DBL_DIG を見ないといけない気がしました。 doubleの全ビットを仮数とした場合に取りうる最大桁数の近似ですか ら、これを越えるDBL_DIGを持つ内部表現はないと思います。 > >sizeof(int)*3の意図がよく分かりませんが。 > > 整数の桁数より大きい数を意図しています。n バイトの場合、 > 整数は最大で 2 ** (8n) なので、桁数は log10(2 ** (8n)) + 1 = 8n * log10(2) + 1 < 2.5n + 1 > とかやって求めました。 なるほど。CHAR_BIT*3/10と大体同じことですね。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦