2006年7月 6日

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

原です。

>坂野 正明です。

>最初に公開されたのが、[ruby-math:00902] 2003年7月だから、
>3年ですか。石の上にも…? (^^)

今回は最後までやります。(…と宣言しておかないとまた尻切れになっ

てしまうので。)

>美しいですね。
>ruby-dev の該当スレッドにざっと目を通したところ、Common Lisp の
>命名を借りてらっしゃる、とのこと。なるほど、です。

rationalize は面白いのだけど、ちょっとおもしろ過ぎなので「標準」
的なメソッドして採用するかどうか迷うところです。

>[ruby-dev:28553]などの inspect に関しては、デバック中は(Rationalと
>分かる)印が欲しい(現状?)、というのに賛成です。今の Ruby 標準だと、
>a=2/3 は 0 になりますが、a=Rational(2,1)/3 は異なるので、内部的に
>Integer かどうかは重要ですから。

最初/1省略派だったのですが、やっぱりあった方が良いという気持ちに
なってます。

># mathn 形式がRuby標準に持ってこられるなら、歓迎しますが (^^)

それを言い出すとまた大論争になるので、するとまたRationalが頓挫す
るので、今しばらくは判断保留でお願いします。:-)

>一点、精度を(必要に応じて)落とすメソッドがあってもいいかも知れません。
>rational が気に入られない理由のひとつに、速度をよく聞きます。たとえば、
> 5764607523034235/576460752303423488 よりは、1/100 の方が、内部的な
>計算速度は向上します。だから、
> 5764607523034235/576460752303423488 → 1/100
>にするようなメソッドがあってもいいかも知れません。

ふなばさんの言うとおり、それに近いことはあります。

x.rationalize(e)

とすると x - e から x + e までの中で一番簡単な有理数を探します。
ちょっと面白いのは、x は Float だけでなく Rational でもいいとい
うことです。もともと x が q/p に十分近ければ、x から q/p を「復
元」するには、e を p**(-2) ぐらいに取ればいいです。

引数の無い rationalize とある rationalize(e) はちょっと性質が違
うので同じメソッド名はどうかという意見もあるのですが、そこはそれ、
Rubyだからいいかと、、、違うか。

> r.precision(order=5)
>など?
># order として、有効桁数を持ってくるか、小数点以下の有効桁数(お金の計算
># などではそうあるべき?)を持ってくるか、あるいはその両方サポートか、
># というのがひとつ問題として残りますか。

ネーミングがはまればあり得るかもしれませんね。しかし「標準」のRational
には難しいでしょう。Rationalのメソッドには基本的には「十進数」、
「二進数」など数の表記に関わるメソッドは入れて無いから。


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




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