HugeInt Ver.0.5 開発日記

2005/12/28-2008/08/02

巨大な数を計算するJavaScriptプログラムの開発ノート。


性能比較(IE6)

処理内容 Ver.0.3 Ver.0.4 Ver.0.5
2の10000乗 1300ms  450ms  350ms
2の50000乗 33000ms 5000ms 4300ms
1000の階乗 1000ms  350ms  350ms
400桁の10進数を2進数に変換 1000ms  250ms  250ms
ルート2小数点以下1000桁 2000ms  600ms  550ms

以下、巨大数演算Ver.0.5の開発記録。 外見は同じだが基本設計はVer.0.4とは異なる。 作ったプログラムのバージョン一覧


2008年08月02日

alpha6

2年越しの更新。

加減算関数を高速化、一部の関数を一新して汎用的に使える形式に整理した。ただし、すぐに全体の高速化に結びつくようなものではない。

2006年01月28日

alpha5

未完成だった関数の作成と、除算で発生する問題を修正。具体的にはalpha2で変更した16桁の商を元に戻した。精度限界以上では変数の格納も信頼できないため、誤差修正できても強制的に精度を超過した部分が丸められてしまう。

2006年01月01日

alpha3

除算を追加。 14桁区切りだった除算を15桁で行えるようにした。 本来15桁で区切ると商が16桁になりJavaScriptの精度限界を越えてしまうが、元々除算関数は誤差を考慮して作られているため、少しぐらい精度が乱れようと自力で誤差を修正できる。 演算速度はVer.0.4Finalと同じぐらい。

long_mulを使わずに同等の速度が出せたところでVer.0.4と同じスタートラインについた。

alpha4

リンク先のChangeLog参照。今後は全て個々のディレクトリ内のChangeLogに記述する。

2005年12月30日

alpha2

alpha1の配列型とVer.0.4の文字列型の両方が使えるように改造した。 これによって各データ形式ごとの最短コースをカットできるようになった。 ただしまだ最短コースは用意していない。

今回HugeIntオブジェクトに新たにmodeを追加。 ここに配列型か文字列型かの判別情報を格納する。

また、以前まではHugeIntオブジェクトに自動変換する関数はHugeInt.sakuraだけだったが、今回はHugeInt.naru,HugeInt.sakura,HugeInt.airiの3種類を用意した。

この3つの変換関数で2種類のデータ形式間を行き来するという作戦だ。

2005年12月28日

alpha1

アルゴリズムはVer.0.4と同じだが、データ型を純配列にした。これによって乗算時のデータ型変換が不要になり乗算が20%高速化。Ver.0.4終盤で導入せざるをえなかった、連続乗算関数long_mulを使わずして同程度の速度を出すことが目的。

Ver.0.5は演算プログラムとHTMLとの相関性を完全に断ち切った。 演算用の.jsファイルのみを読み込むとプログラムは完全にサイレントモードになり、出力フォームとwriter.jsを追加するとフォームに結果を表示できるようになる。 そしてさらにdemo.jsを読み込むと動作テスト用のサンプル集が起動する。通常巨大整数計算を行いたいときはwtriter.jsまでを読み込めばよい。

Ver.0.4ではファイルインクルード用のloader.jsが存在したがVer.0.5ではHTMLと連動するということで廃止した。

現時点では外部で利用する場合の関数ライブラリが完全に揃っていない。









HugeInt Ver.0.5

2005年12月28日
alpha1
2005年12月30日
alpha2
2006年01月01日
alpha3
alpha4
2006年01月28日
alpha5
2008年08月02日
alpha5