From: sheepman Date: 2008-04-24T09:00:43+09:00 Subject: [ruby-dev:34502] Re: ComplexFloat こんばんは sheepman です。 On Sun, 20 Apr 2008 18:08:06 +0900 Tadayoshi Funaba wrote: > 議論中コンテナといわれる方法 (個人的に違和感がありますが) は、Common > Lisp、Scheme、Squeak、Factor などに見られます。これらにはクラスがない > ものもありますが、型があり、同様に考えていいと思います。これらは良くな > いのでしょうか。それとも、ruby に特有の問題があるのでしょうか? 複素数の除算で問題があります。Scheme では (/ 1 1+1i) は 1/2 - 1/2i か 0.5 - 0.5i のどちらかです。 しかし、 Ruby の Complex では mathn を require しない場合 -i になります。 $ ruby-1.9 -ve 'p 1/(1+Complex::I)' ruby 1.9.0 (2008-04-24 revision 15721) [i686-linux] Complex(0, -1) 複素数を使う場合に求められる除算の動作は、Scheme のそれのどちらかだと思います。 なので、現在の Ruby の Complex の「/ の意味は自身の実部と虚部に任せる」という 方針は変えるべきだと思います。 選択肢としては、 1. 実部と虚部が整数の複素数の除算は、実部と虚部を Rational に変換してから行う。 2. Complex を捨てて ComplexFloat のみ。 3. Scheme の exact complex に相当する ComplexRational を導入する。 4. complex が常に mathn を require する。 があろうかと思います。 -- sheepman / TAMURA Takashi