いけがみです。

2 つの Bignum の掛け算を現在(Ruby 1.6.7)の実装よりも
早く計算する Karatsuba アルゴリズムを試しました。
[ruby-talk 29707] で紹介されている Benchmark 1 を、
手元の環境で試したところ、速度が約 1/5 になりました。

ソースコードと解説文を
http://www.aist-nara.ac.jp/~daisu-ik/ruby/bignum_mul/
に書きました。

Karatsuba アルゴリズムを利用してさえも、
まだ GNU MP よりは遅いかもしれませんが、
計算の速度を改善する余地はありそうです。

ここから、質問です。

Bignum を生成するための C の関数 bignew_1() が
 bignum.c で定義されています。
しかし static な関数として定義されているので、
拡張ライブラリを作るときに bignew_1 を呼べません。

たとえば、今回のように Bignum の演算をつけくわえるときに、
Bignum のオブジェクトを C のプログラム上で作りたくなることが
あるのですがどうしたらいいですか。

今回は、bignum.c の bignew_1() をそっくりコピーした
別の関数を使いました。
--
池上 大介
Daisuke IKEGAMI <daisu-ik / is.aist-nara.ac.jp>
奈良先端科学技術大学院大学 情報科学研究科
情報処理学専攻 情報基礎学講座 関研究室