原です。

私も 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 組み込みの初期的な役目は果せたと思いま
>> す。
> 
> 私からいうのも何なんですが, ありがとうございました.

私からも。ふなばさん、ありがとうござました。