原です。

なんか発言している人たちの任意の二人で意見が食い違ってるみたい…皆さん
はどうかしれませんが、私は前向きに発言したいと思います。私が後ろ向きの
発言をしたとすれば、私が後ろ向きの発言をしようとして後ろ向きの発言して
いるのではなく、私は後ろを前と勘違いしているのです。

Tadayoshi Funaba wrote:
>> 今までの Complex は、complex.rb にほぼ残して、たとえば Rational 成分
>> の複素数を使いたい人は、Complex を使い、科学技術計算をしたい人は、こ
>> の (2) を使え…で、八方丸く収まるのではないでしょうか。
> 
> complex.rb は、いろいろ問題なり課題があるので、そのままつかうには無理が
> あると思います。それだけでもロクにメンテされてなかったのに、そんなにい
> ろいろ用意して大丈夫なんですか。

大丈夫かって?……どうなんでしょう。

> そもそも、原さん、complex の組み込み自体に消極的だったんですよね。

そうです。Complex が難しい、という話を書いておくと、

例えば、z = Complex(1.0, 0) と z = Complex(1, 0)、どちらのケースでも

  z.is_a?(Complex) && z == 1

は真なのに、z/2 は、前者では 0.5 に等しく、後者では 0 に等しい。つまり、
このケースでは Complex は、もとの数をラップして分かりにくくしている。

complex.rb の Complex は、いわゆる複素数そのものを表しているというより
も、「複素化」を表している感じです。もちろん大いに存在意義はあります。

そこで、Float からの類推で分かりやすい ComplexFloat(仮) があれば、より
即値っぽくて良いのではないか、と思ったのです。これには、もともと Ruby
で複素数の計算をしたい人は、double 精度の技術的な計算を手軽に行いたい場
合が多い、という予測もあります。ComplexFloat という名称はいまいちかもし
れません。

ちなみに私自身は Complex をあまり使いません。有理数成分の Complex は、
使うことがあるかも。

で、更に例えば Math.sqrt の値ですが、Math.sqrt(-8) をエラーにしないなら、
ComplexFloat(仮)にしたらどうかというのが提案です。

ちなみに Math.sqrt(4) は、今まで通り 2.0(Float) とします。結局、Math.sqrt
は、常に Float か ComplexFloat(仮) を返すとするわけです。

以上、

  若干の修正の後、complex.rb にある Complex も組み込みにする

ということが一応の前提で発言しています。念のため。


ところで、もしかしてふなばさんは、Math.sqrt(4) は、Integer の 2 にした
いと考えているのでしょうか?Rational、Complex 組み込み後、デフォルトで、
mathn を require しない状態で、オプションなしで、の話です。