正木です。

|[ruby-math:00636] Re: Rational の高速化
|From: Takaaki Tateishi <ttate / kt.jaist.ac.jp>

|単純に拡張モジュールとして書いてしまうというものであれば,以前
|に frac.so という拡張モジュールを作ってみたことがあります.

早速入手して拝見しました。大変参考になりました。
ただ、 gcd に関しては私の program の方が低 level な分だけ(高級な書き方を
知らなかっただけですが)少し(2、3割程度)早いようです。


|[ruby-math:00637] Re: Rational の高速化
|From: "Chikaoka, Nobuyoshi" <chikaoka-nobuyoshi / tym.ed.jp>

|Ruby初心者なので良く判らないのですが、高速化をはかるならば、
|再帰呼び出しのコストも問題になるのではないでしょうか。

再帰定義を使わないものも試して見ましたが、特に早くはなりませんでした。

|私だったら(C言語では)次のようにします。
|
|{ DI>>=1; } while (!(DI&1)); /* 奇数になるまで2で割り続ける */

前にも([ruby-math:00632] Re: class Real)書きましたが、Bignum では
大きな数になればなるほど、この部分で非常に時間がかかることになります。
Fixnum では高速化の決め手になっている所が Bignum では逆に bottle-neck
になっているわけです。