bigint.js v0.5 beta 18
2004-01-13
-
Mozillaで長さ65536以上の文字列を扱えない問題に半分対応。
-
被除数65536桁以上の割り算が可能になった(現時点では、除数は65536桁未満でなければならない)。
このような割り算は遅いので、極力使わないで済ますべきだが、実行は可能なように、ライブラリとしてはサポートする
(
_qr_typeX
)。
手元では、7万桁÷70桁が10秒程度、7万桁÷350桁が1分程度。
とりあえず動いただけなので、まだ高速化の余地はある。
-
Bigintの toString() メソッドは、桁数が500を超えると自動的に中略して出力する。
6万桁で壊れるMozillaのバッファを保護するためだが、その方がかえってデータも見やすい。
ただし、bForceAllDigitsフラグを指定すると、途中を略さない。
-
テーブル値が0ばかりの sparse なオブジェクトを作るとき、
Bigint.fromFloat
は、内部的に文字列を経由させず、直接テーブルを書く(このほうが明らかに効率が良いが、
これまでの100桁、200桁というオーダーでは、大差なかった)。
例えば、Bigint.fromFloat("1.23e+507654")
として、50万桁の数字を表すオブジェクトを高速に生成できる。
実際に50万桁分の配列を確保して0は0で埋めるので注意。
JavaScriptの数値型は309桁しか行けず、あとはInfinityに落ちてしまう。
-
IEでは65536桁以上をシームレスに扱えるが、実際には、IEでは、5000桁以上くらいで速度の低下が起こる。
内部的なメモリ管理の問題と思われる。IEでは5000桁以上では、従来方式(
_qr_typeF
)より、
6万桁超用に追加した _qr_typeX
の方が速い。Mozillaでは、速度の逆転はもっとぎりぎりで起こる。
したがって、プラットフォームによって内部的な関数の選択を変えるようにした。
-
IEでは一般的にメモリ管理に問題があり、超巨大オブジェクトを作ると、それだけで以降の処理が遅くなる。
必要に応じて明示的にメモリを解放することで解決する場合もある(delete、=nullなど)
-
IEでは複雑な正規表現が微妙に遅いかもしれないと思い、場合によってはコードが複雑になっても正規表現を使わないようにした。
-
細かいところを整理。平方根、円周率のデモで10~20%程度の高速化。
いろいろいじったのでエンバグの可能性も。
注意 Operaでは最初のデモはフリーズするかもしれません。
Operaについての不具合は、販売元にお問い合わせください。
(Operaユーザは直接または広告スポンサー経由で発売元に大金を払っているのですから、
買った品物の欠陥について製造元にサポートを要求すべきでしょう。)
[index]