[#28501] rb_gc_call_finalizer_at_exit() の実行中かどうかを知りたい — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
6 messages
2006/04/03
[#28502] Re: rb_gc_call_finalizer_at_exit() の実行中かどうかを知りたい
— Yukihiro Matsumoto <matz@...>
2006/04/03
まつもと ゆきひろです
[#28509] Rational — Tadayoshi Funaba <tadf@...>
ふなばです。
49 messages
2006/04/05
[#28510] Re: Rational
— keiju@... (石塚圭樹)
2006/04/05
けいじゅ@いしつかです.
[#28512] Re: Rational
— Tadayoshi Funaba <tadf@...>
2006/04/05
ふなばです。
[#28515] Re: Rational
— keiju@... (石塚圭樹)
2006/04/05
けいじゅ@いしつかです.
[#28522] Re: Rational
— Tadayoshi Funaba <tadf@...>
2006/04/06
ふなばです。
[#28523] Re: Rational
— Yukihiro Matsumoto <matz@...>
2006/04/06
まつもと ゆきひろです
[#28526] Re: Rational
— Tadayoshi Funaba <tadf@...>
2006/04/06
ふなばです。
[#28530] Re: Rational
— Tadayoshi Funaba <tadf@...>
2006/04/09
ふなばです。
[#28513] Re: Rational
— Shin-ichiro HARA <sinara@...>
2006/04/05
原です。
[#28514] Re: Rational
— keiju@... (石塚圭樹)
2006/04/05
けいじゅ@いしつかです.
[#28517] Re: Rational
— Yukihiro Matsumoto <matz@...>
2006/04/06
まつもと ゆきひろです
[#28520] Re: Rational
— keiju@... (石塚圭樹)
2006/04/06
けいじゅ@いしつかです.
[#28521] Re: Rational
— Yukihiro Matsumoto <matz@...>
2006/04/06
まつもと ゆきひろです
[#28525] Re: Rational
— keiju@... (石塚圭樹)
2006/04/06
けいじゅ@いしつかです.
[#28527] Re: Rational
— Shin-ichiro HARA <sinara@...>
2006/04/06
原です。
[#28536] Re: Rational
— Shin-ichiro HARA <sinara@...>
2006/04/10
原です。
[#28537] Re: Rational
— keiju@... (石塚圭樹)
2006/04/10
けいじゅ@いしつかです.
[#28545] Re: Rational
— Shin-ichiro HARA <sinara@...>
2006/04/11
原です。
[#28546] Re: Rational
— Yukihiro Matsumoto <matz@...>
2006/04/11
まつもと ゆきひろです
[#28547] Re: Rational
— keiju@... (石塚圭樹)
2006/04/11
けいじゅ@いしつかです.
[#28548] Re: Rational
— Yukihiro Matsumoto <matz@...>
2006/04/11
まつもと ゆきひろです
[#28563] Proxy authentication patches for open-uri and rubygems — "Tadashi Kadowaki" <tadakado@...>
門脇と申します。
3 messages
2006/04/15
[#28569] rational 1.01 — Shin-ichiro HARA <sinara@...>
原です。
16 messages
2006/04/16
[#28571] Re: rational 1.01
— Tadayoshi Funaba <tadf@...>
2006/04/16
ふなばです。
[#28572] Re: rational 1.01
— Shin-ichiro HARA <sinara@...>
2006/04/16
原です。
[#28573] Re: rational 1.01
— Tadayoshi Funaba <tadf@...>
2006/04/16
ふなばです。
[#28574] Re: rational 1.01
— Shin-ichiro HARA <sinara@...>
2006/04/16
原です。
[#28575] Re: rational 1.01
— Shin-ichiro HARA <sinara@...>
2006/04/17
原です。
[#28576] Re: rational 1.01
— Tadayoshi Funaba <tadf@...>
2006/04/17
ふなばです。
[#28578] Re: rational 1.01
— Tadayoshi Funaba <tadf@...>
2006/04/17
ふなばです。
[#28584] Re: rational 1.01
— Shin-ichiro HARA <sinara@...>
2006/04/18
原です。
[#28589] Float#div and Float#divmod [AGAIN] — Shin-ichiro HARA <sinara@...>
原です。
16 messages
2006/04/23
[#28590] Re: Float#div and Float#divmod [AGAIN]
— Yukihiro Matsumoto <matz@...>
2006/04/23
まつもと ゆきひろです
[#28591] Re: Float#div and Float#divmod [AGAIN]
— Shin-ichiro HARA <sinara@...>
2006/04/23
[#28592] Re: Float#div and Float#divmod [AGAIN]
— Yukihiro Matsumoto <matz@...>
2006/04/23
まつもと ゆきひろです
[ruby-dev:28530] Re: Rational
From:
Tadayoshi Funaba <tadf@...>
Date:
2006-04-09 05:59:54 UTC
List:
ruby-dev #28530
ふなばです。
rational/rationalize の話をしたので、原さんの rational 1.00 の
Rational(aFloat) と比べてみました。
原さんの Rational 1.00 ではこうなりますが、
Rational(0.3) => 2702159776422297/9007199254740992
いくつかの Common Lisp や Haskell 処理系などで、浮動小数点数の書式が同
じ場合、rational や toRational の結果はちゃんと一致しているようです。
というか、そうじゃないものはみつけられませんでした。
(rational 0.3f0) => 5033165/16777216
(rational 0.3d0) => 5404319552844595/18014398509481984
toRational (0.3::Float) => 5033165 % 16777216
toRational (0.3::Double) => 5404319552844595 % 18014398509481984
(inexact->exact 0.3) => 5404319552844595/18014398509481984
0.3 asFraction => (5404319552844595/18014398509481984)
など。
とりあえず、原さんの Rational 1.00 も rb_rat_flo_to_rat() をつぎのよう
にすると、同様になりそうです。
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 にすべきかも。
CL の仕様書によれば「浮動小数点数は (数学的には) s*f*b^(e-p) の形式の
有理数である」らしいので。これに従えば、問題なく中身が取り出せているな
らば、結果も定まるように思います。
今のところ、どうすべきか、ということはないのですが、なぜ違うのかはちょっ
と疑問です。
rationalize のほうは、モノにもよりますが、rational の10倍前後遅いみた
いですね。なんか難しいことをしているのでしょうか。これを to_r にするの
は少し厳しいのかも。とりあえず、僕がみたかぎりでは、rational のほうが
普通っぽいようです。