From: Masaaki Sakano Date: 2006-07-06T01:43:38+09:00 Subject: [ruby-list:42530] rational.so /Re: Float/String#to_r 坂野 正明です。 At Wed, 5 Jul 2006 12:29:30 +0900, Shin-ichiro HARA wrote: > 現在、ruby-devで拡張ライブラリrational: > http://blade.nagaokaut.ac.jp/~sinara/ruby/rational/ > を、標準添付あるいは組み込みにしようと、調整を行っています。 おぉ、ついに! (すばらしい……) # ruby-dev は最近読んでいなくて、全然存じませんでした! 最初に公開されたのが、[ruby-math:00902] 2003年7月だから、 3年ですか。石の上にも…? (^^) > が、例えば[ruby-dev:28509]あたりで始まるスレッドで少し様子が > わかると思います。 他、以下のスレッドが重要そうなところでしょうか(メモ代わり)。 [ruby-dev:28569] [ruby-dev:28744] > というわけでrational.soに対するご意見をうかがえれば有り難い ということですので、遠慮なく、以下、二、三、私見を書かせて頂きました。 > Float#to_rは違います。rational.soのFloat#to_rは、小数の内部 > 表現を有理数で表したもので、例えば、0.01.to_rは、 > 5764607523034235/576460752303423488のようになります。 > > さらにFloat#rationalizeというのも用意していて、例えば > r = 0.01.rationalizeというのは、r.to_f == 0.01 となるような > 有理数rのうちで、もっとも分子分母の小さくなるもの(1/100)です。 美しいですね。 ruby-dev の該当スレッドにざっと目を通したところ、Common Lisp の 命名を借りてらっしゃる、とのこと。なるほど、です。 [ruby-dev:28553]などの inspect に関しては、デバック中は(Rationalと 分かる)印が欲しい(現状?)、というのに賛成です。今の Ruby 標準だと、 a=2/3 は 0 になりますが、a=Rational(2,1)/3 は異なるので、内部的に Integer かどうかは重要ですから。 # mathn 形式がRuby標準に持ってこられるなら、歓迎しますが (^^) 「Rational("1.1") → 11/10」の仕様は、賛成です。 一点、精度を(必要に応じて)落とすメソッドがあってもいいかも知れません。 rational が気に入られない理由のひとつに、速度をよく聞きます。たとえば、 5764607523034235/576460752303423488 よりは、1/100 の方が、内部的な 計算速度は向上します。だから、 5764607523034235/576460752303423488 → 1/100 にするようなメソッドがあってもいいかも知れません。 r.precision(order=5) など? # order として、有効桁数を持ってくるか、小数点以下の有効桁数(お金の計算 # などではそうあるべき?)を持ってくるか、あるいはその両方サポートか、 # というのがひとつ問題として残りますか。 坂野 正明