From: Kenta Murata Date: 2008-04-11T16:13:31+09:00 Subject: [ruby-dev:34329] Re: ComplexFloat むらたです. 2008/4/11 Tadayoshi Funaba : > > だとすると,ふなばさんは私の提案の何に対して「いびつ」であると > > お感じになっているのでしょうか?そこがまだ理解できていないので > > 教えてください. > > Rational で、自前の Bignum を用意した人は、Rational の事だけ考えてたん > じゃないでしょうか。そのあたりがいびつの原因だと思います。 残念ながら,それがいびつであるとは感じられないんですよね. Rational 以外との相互作用は coerce を適切に定義することで どうとでもできますよね.Fixnum/Bignum 以外は持たない事を 想定しているのでしたら,Rational をコンテナとし実装する 必要性も無い,というのが私の考え方です. > > 少なくとも C99 の複素関数群をサポートするか否かは Ruby の数値系の > > 方向性に大きく影響するはずです.そして,複素関数群をサポートする場合の > > なくはないかもしれません。一応、C99 はつかわないことにする、とか。 C99 ってそんなに嫌われてるんですかねぇ >_< > 村田さんは、C の Complex 型をつかえば速くなる、というようなことは直接 > 的にいわないようにしているようですね。たぶん、そうしても Complex が劇 > 的に速くなくわけでも、ruby の数値演算能力が飛躍的に向上するわけでもな > いことを知っているからじゃないかな、と思っています。 今までは直接的な表現は避けましたが,先程まつもとさんのメールへの返信で そのことも明記しました.C99 の _Complex で速くなるかどうかはコンパイラ とライブラリに依存します. ruby の数値演算能力の向上は,C99 の _Complex を使う事とは別問題です. ひとつ前のメールにも書いたように,コンテナではない複素数があれば, YARV で演算の最適化をすることができます. > 手元で少しテストしたところでは、まったく速度改善のための配慮がない素朴 > な Complex と RVALUE を拡大するなど有利な条件がある ComplexFloat を比 > べても驚くほどの違いはないようです。また、実装と API は別、ということ > は村田さん自身が認められたと思います。 私の patch は実装案を示すために急いで作ったもので,ひとつも最適化されて いません.しかし,あの実装からの最適化は可能ですよね. # ちなみに,RVALUE の拡大は不利な条件です >_< > 何が目的で、何が手段なのかよくわからなくなっている気がします。C の > Complex 型をつかいさえすれば満足、ということかもしれないけど、僕からす > ると、現時点でそれが必ずしも最善とも思えません。 複素数の表現を C で持つ事の利点は,複素数クラスの演算が他のクラスに 依存せずに決定できる事です.それで,前にも述べましたが,コンテナとして の複素数も必要なので,本当はどっちも組込まれているべきだと思うんです. 私にとっての最善は,ふなばさんの Complex と僕の ComplexFloat が共存 することです.そして,それが Ruby にとっても最善であると信じています. > この件は、最初にいったように、実装の問題でしかないと思います。C の > Complex 型をつかう可能性は否定しませんが、現時点で、つかえ、つかわない > のはおかしい、とわれる筋はない、と個人的には判断しました。 組込みクラスになる可能性があったので,強く否定しました. もし,「標準添付ライブラリのまま実装が C になりました」という だけだったら何も言わなかったと思います.組込みになるということは, ruby を起動しただけでそこに Complex が存在することになります. require "complex" しなければ存在しない Complex と,何もしなくても 存在する Complex では意味が違いますよね?組込み化ってそのくらい 大きな影響があると思うんですよ. > この前、斎藤さんが紹介してくれたようなこともありますし、今すぐ何かしな > ければならないことでもありません。いずれ、速度改善などが必要だと判断し > た場合、その時良いと思えば、C の Complex 型をつかうこともあるのかもし > れません。今はまだ、Complex の組み込み自体が正式に決まるかどうかわから > ない時期です。 私は読み違えていたかもしれません.Complex の組込み化はほとんど決定 されているものだとばかり思っていました.もしかしたら組み込みクラス ではなくなる可能性もあるんですか? -- Kenta Murata OpenPGP FP = FA26 35D7 4F98 3498 0810 E0D5 F213 966F E9EB 0BCC