原です。 >ふなばです。 >static VALUE >rb_rat_flo_to_rat(klass, x) > double x; >{ > double f; > int e; > f = frexp(x, &e); >#if 1 /* dbl */ > f = ldexp(f, DBL_MANT_DIG); > e -= DBL_MANT_DIG; >#else /* flt */ > f = (float)ldexp(f, FLT_MANT_DIG); > e -= FLT_MANT_DIG; >#endif > > return RT_S_NEW2(klass, RT_MUL(rb_dbl2big(f), > RT_POW(rb_int2big(2), INT2FIX(e))), INT2FIX(1)); >} > ># コード上の数字 2 は、FLT_RADIX にすべきかも。 これでいいみたい。私のコードは工夫したつもりで、かえって精度を おとしてしまっていたようです。 ところで /* flt */ の方はなぜ書いたのですか?rubyのFloatは、 double なので、/* dbl */の方でいいんですよね?