From: Takeshi Horinouchi Date: 2008-04-21T09:16:46+09:00 Subject: [ruby-dev:34464] Re: ComplexFloat 堀之内です。 > > muraken:~/src/ruby$ ./miniruby -e 'p Complex(1, Rational(1, 2)) / 2' > > Complex(0, Rational(1, 4)) > > この例は Complex がコンテナであるという問題点を良く指摘していると > 思います。 実部虚部は、整数、有理数、浮動小数点数の場合がありえるけど、実部 と虚部の型が合うように常に揃える(合うように coerce する)という のはどうでしょう。初期化時も演算時も。(これは、ComplexFloat を 別途導入することはしないという案です。) 実部虚部ばらばらのコンテナである気持悪さがなくなりますし、 下記ででてきた >> 実部と虚部が共に整数であるような複素数をガウス整数と呼ぶそうです。 >> また、実部と虚部が共に有理数だとガウス有理数と呼ぶそうです。 も表現できます。というか、ガウス整数、ガウス有理数、実数の拡張と しての普通の複素数を浮動小数点近似したもの、の3種類をサポートす るということになります。 >   x == y かつ x.class = y.class だが、x と y の振る舞いが違う は、残ってしまいますが、3者を判別するメソッドでもあれば良いので はないでしょうか。複素数を使うというのは、やはり少々特殊ですので、 妥協できそうに思いますが。