2006年7月 6日

[ruby-list:42530] rational.so /Re: Float/String#to_r

坂野 正明です。

At Wed, 5 Jul 2006 12:29:30 +0900,
Shin-ichiro HARA <sinara@xxxxx> 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 として、有効桁数を持ってくるか、小数点以下の有効桁数(お金の計算
# などではそうあるべき?)を持ってくるか、あるいはその両方サポートか、
# というのがひとつ問題として残りますか。

坂野 正明


投稿者 xml-rpc : 2006年7月 6日 01:43
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/42459
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。