From: Masahiro TANAKA Date: 2008-03-28T23:09:27+09:00 Subject: [ruby-dev:34172] Re: Complex組み込み 田中です。 最初に言っておきますが、気を悪くされたのならすみません。 決してふなばさんがされていることを否定しているわけではなく、 ただ、組み込みの経緯が見えないので、質問したのです。 Tadayoshi Funaba さんは書きました: > > となるようですが、別の実装として、 > > > > (2) CやFORTRANの複素数型をラップした、実部・虚部がdouble型の複素数クラス > > > > とすることも考えられます。(2)の利点として、 > > それは考えましたが、あくまで実装の都合ですね。浮動小数点数のみからなる > 場合、そのようなことをすれば若干速くなるかもしれないとは思いました。実 > 装の都合のみで仕様を決めることはないと思います。それに C99 ですよね。 > > > a. 速度で格段に有利。(組み込みを要望する理由の1つに速度があると思います) > > そういう要望があって組み込みにしたわけではないです。rational を組み込み > にする一貫としてやりました。また、rational、complex の仕様や実装で都合 > の悪いところを直すためでもあります。 確か、RCRでcomplex組み込みの要望があって、理由は速くなるから、 ということを言っていた人がいたように思います。今見たら消えていますが。 私も同じ考えです。 そういう要望を受けて作業しているのかと勘違いました。すみません。 そうだとすると、このまま進めてもよい結果にならないと心配になったので、 こういう話を出しました。 > 仮にそうだとしても、rational の扱いを直ちに捨てる必要もないと思っていま > す。 そういう意図はなかったのですが、舌足らずでしたね。 > 遅くて困る、ということも聞いたことがないし、どれくらい速ければいい > のかもわかりませんが、ちなみに格段に有利というのは、どのくらい有利なん > ですか? 今のCPUならdoubleの演算にそれほどコストがかからないので、 Floatに近いくらいには速くなるはずです。 > これまでのところ、僕には田中さんのいわれることは、Bignum をなくせば > ruby は速くなる、という主張と大差ないように感じます。 そうは言っていないと思うのですが。 > > b. C,FORTRANと同じであり、Pythonでも後者で実装されているので、 > > 仕様を参考にできる。 > > python は有理数もないし、他にも参考になるものはあるので。 参考になるものとは? と思ったら下に書いてありますね。 > > c. 拡張ライブラリからアクセスしやすい。 > > > > などがあります。複素数は科学技術計算でよく使う型で、 > > そういう使い方からすれば(2)の方が求められます。 > > 逆に、(1)を組み込みにする利点が思い浮かばないのですが、 > > (2)でなく(1)を組み込みにする理由とは何でしょうか? > > それは了見が狭いですね。 それは重々承知しているんですが、 それぞれの了見で思ったことを言わないと進歩しないと思うので。 > だったら、ruby は浮動小数点数だけにすればいいんじゃないですかね。ただ、 > ruby の場合、既存の数値演算もそんなに速くないと思うので、複素数のあつか > いを変えたからといって、科学技術計算一般でどれだけ役立てられるのか知り > ませんけど。 実際にRubyを数値計算に使っている例として http://www.artcompsci.org/ などがあります。 Rubyもそれなりに数値計算に役に立つんです。 ささださんがFloatを速くしようとしていますが、 そうなればこういう使い方には役に立ちます。 こういう流れから、複素数を速くしたいという要望は 増えると思います。 ただ、Rubyには、共存できる可能性があり、 実際FloatとRationalは今でも共存できているわけで、 これはかなり魅力的な点だと思います。 > 逆に、rational が組み込みで、複素数でつかえなくする理由はなんですか? 現状の Complex を使えなくしよう、という提案ではなく、 原さんのメールにもあるように、共存することもできると思います。 > Common Lisp、Scheme、Factor、Squeak などでも普通につかえますが、このあ > たりの言語はちょっとおかしいってことなんですかね。 こうした言語が科学技術計算でバリバリに使われているという話は 聞いたことがありません。 そういう実装では、科学技術計算には向かないんじゃないでしょうか。 > もし、田中さんの主張がもっともだとしても、やはり、Complex は、より一般 > 的な仕様であるべきで、田中さんのいわれるようなものは、Complex の内にあ > るにせよ、外にあるにせよ、特殊なものとして扱われるべきじゃないでしょう > か。 そうかもしれません。ここは議論のしどころではないでしょうか。 > 今回は、よりよい実装で置き換える、ことが目標だったこともありますが、僕 > は、誰も速くしてくれといってないのに、速くないとダメだ、仕様を曲げてで > も速くしよう、などとは考えもしませんでした。 中には速くないとダメだ、という使い方をする場合もあり、 そういう使い方もできるような仕様になればよいと思うのです。 ただ、もしかして、組み込み複素数が、速い複素数の可能性を否定するような 実装へ向かっているように見えたので、こういう要望もあるということを伝え たかったのでした。 田中昌宏