From: Shin-ichiro HARA Date: 2008-03-25T18:12:10+09:00 Subject: [ruby-dev:34125] Re: rational.rb, complex.rb and mathn.rb 原です。 私も Complex の組み込みは Rational とは比較にならないくらい、仕様が決め にくいので、組み込み消極的だったんですが、もう入れると決めてしまったんで すよね? > けいじゅ@いしつかです. > > In [ruby-dev :34107 ] the message: "[ruby-dev:34107] Re: rational.rb, > complex.rb and mathn.rb ", on Mar/22 15:59(JST) Tadayoshi Funaba > writes: > >> lib/rational.rb はなくす。 >> >> gcd は、どうしても残したければ、ruby 本体に吸収するか、別途、 >> lib/gcd.rb (?) などに置きます。 私も、Integer のメソッドとして組み込んでほしいです。 >> lib/complex.rb もなくす。 >> >> Math を複素数対応版で置き換えてしまいます。 >> 基本的には、今ある石塚版を C に直して math.c に反映させるだけです。 >> もちろん、もっと効率や精度面で、優れたものがあれば、それをつかっても >> いいです。 > > これはこれで良い気がします. > > ただ, 今までの互換性が気にならないわけでもないですが, 今まで例外が起こっ > ていた場面でComplexが帰ってくることになりますので... 互換モードにする > 何かを用意した方が良いかも. 難しいですね。やっぱりデフォルトでは、sqrt(-1) は例外じゃないかな。 >> lib/mathn.rb は残してもいい。 >> >> けど、中身は、require 'matrix' と / の置き換えと Unify の定義だけに >> します。** や sqrt の再定義は、意義だけ汲み取って捨てます。 >> Prime は残したければ、 lib/prime.rb (?) などに置きます。 >> ruby -m を新設すれば、lib/mathn.rb もいらないかもしれません。 > > できれば, このまま残しておいて欲しいなぁ. 問題があるというか中途半端な > ところがあるのは認めます. これはこれで頑張るということで. 今回、mathn.rb で aRational**aRational が Rational で表現できるときは、 Rational を返すように凝った作りになってるのに気付きました。いまさら。 すばらしい。 ただ、石塚さんは素因数分解を使っているけど、もうちょっと速い方法がある かもしれませんね。1/2 乗だと、整数の高速に平方根を求める方法が、 ruby/math のどこかで isqrt とかいう名前で提案されていたし、同様に整数の 1/n 乗もニュートン法を使って速く求めることができると思います。多分複素数 値でも同様に出来て、(-8)**Rational(1,3) を Complex(0, Rational(2)) にで きるのではないか。 でも、組み込みでそこまでするのは、やりすぎですね。 >> これを実際やるやらないに関わらず、一応言うべきことは言ったと思うので、 >> ここまでで、complex、rational 組み込みの初期的な役目は果せたと思いま >> す。 > > 私からいうのも何なんですが, ありがとうございました. 私からも。ふなばさん、ありがとうござました。