From: Shin-ichiro HARA Date: 2008-04-17T19:06:20+09:00 Subject: [ruby-dev:34439] Re: ComplexFloat 原です。 私の意見は 1. Complex と ComplexFloat の2本立てにする 2. (ComplexFloat) op (数値) = (ComplexFloat)」を演算の基本とする。 です。 > むらたです. > 加えて,せっかく Rational が組込まれているのだから,次の結果は > Complex(Rational(1, 2), Rational(1, 4)) のほうが良いと思います. > > muraken:~/src/ruby$ ./miniruby -e 'p Complex(1, Rational(1, 2)) / 2' > Complex(0, Rational(1, 4)) この例は Complex がコンテナであるという問題点を良く指摘していると 思います。前にも書いたことの繰り返しになるけど、Ruby の数値には   x == y だが、x と y の振る舞いが違う ということがあります。例えば「x = 1、y = Rational(1) で x/2 と y/2 が異 なる」というケース。でも、Numeric とはそういうものです。しかし、   x == y かつ x.class = y.class だが、x と y の振る舞いが違う という「x = Comlex(1, 0) で y = Complex(Rational(1), 0)」のケースは、数 値としては、かなり特殊なのではないか。数値に状態があるかのように見える。 そこで、ComplexFloat という「Float 気分で使える複素数」があるといいと思 うわけです。 問題点としては、Ruby の数値体系がより複雑になることでしょう。しかし、複 素数の基本は ComplexFloat であり、Complex は補助的な用途に使う、という ことでいいのではないでしょうか。 ちなみに Gauche では、ComplexFloat 相当のみがあり、Complex 相当を持って いません。これはこれで一つの見識かと。 > 加えて,せっかく Rational が組込まれているのだから,次の結果は > Complex(Rational(1, 2), Rational(1, 4)) のほうが良いと思います. > > muraken:~/src/ruby$ ./miniruby -e 'p Complex(1, Rational(1, 2)) / 2' > Complex(0, Rational(1, 4)) 私は現在のままの Complex の仕様がいいと思う。シンプルだから。