bigint.js v0.5 仕様書

bigint.js v0.5 は、JavaScript で無限精度(任意精度)の符号付き整数演算を行うための汎用的ライブラリです。

名前空間

Bigint、Bigint.*、および __BIGINT* という識別子はライブラリが予約しています。 これらの名前をユーザ定義で用いた場合の動作は保証されません。 基本ライブラリ関数はそれ以外のグローバルな名前空間を汚染しないことが保証されます。

Bigintオブジェクトの生成

Bigint.parse()
Bigint.number(), Bigint.n()
new Bigint()

主なインスタンス・メソッド

すべての Bigint インスタンスは、自動的に以下のメソッドを持っています。

プロトタイプ .copy()

自分の実体をコピーして、新しい Bigint オブジェクトとして返します。 Bigint オブジェクトを単に等号で代入すると、同じものへの参照になります。 この区別は通常の操作ではあまり目立たず、参照のほうが高速です。 .copy() は低速であり、メモリを消費しますが、コピー元とは独立の複製を作ります。 等号によるコピーは、コピー元に別名をつけただけであり、コピー元を変更すると一緒に変わります。

big1 = new Bigint( 123 ); // 値 123 を持つ Bigint
big2 = big1; // 参照によるコピー(高速)
big3 = big1.copy(); // 実体のコピー
big1.table[0] = 5; // コピー元を直接書き換える
_debug(big2); // 5 になる。参照によるコピーは実体につれて変化
_debug(big3); // 実体をコピーしたので 123 のまま。

プロトタイプ .toString()

引数をつけないデフォルトの状態では、 .toString() はその Bigint オブジェクトを説明する文字列を返します。 具体的には、 末尾から7桁ずつで分かち書きしたそのオブジェクトの値(マイナスのときはマイナス符号を含む)と、10進桁数を返します。 文字列を引数とする JavaScript の組み込み関数に Bigint オブジェクトを渡すと、 JavaScript 自身によって、自動的にこの関数が呼び出されます。

.toString(10).toString(2) は、 オブジェクトを、分かち書きしない10進数または2進数の文字列に変換したものを返します(マイナスならば符号を含む)。

big1 = new Bigint( "1234567890" );
str1 = big1.toString(); // "123 4567890 (10-digit)" という文字列
str2 = big1.toString(10); // "1234567890"
str3 = big1.toString(2); // "1001001100101100000001011010010"
alert( big1 ); // alert( big1.toString() ) と同じことになる

プロトタイプ .comparedWith()

そのオブジェクトと、引数(Bigintであってもなくても良い)の、大小関係を比較します。 戻り値は数値型で、オブジェクトの方が大きければ正の数、引数の方が大きければ負の数、等しければゼロを返します。

プロトタイプ .isEqualTo()

そのオブジェクトと、引数(Bigintであってもなくても良い)が、数値として等しいかどうかを調べ、 true か false を返します。

プロトタイプ .isZero(), .isEven(), .isOdd()

それぞれ、そのオブジェクトがゼロかどうか、奇数かどうか、偶数かどうかを調べ、true または false を返します。

プロトタイプ .getWidth(), .getBitWidth()

それぞれ、絶対値を 10進数、2進数で書いた場合の桁数を返します。 戻り値は1以上の整数です。

クラスメソッド

Bigint.add( a, b )

ab を足します。 引数は Bigint であってもなくても構いません。 戻り値は Bigint です。

Bigint.sub( a, b )

a から b を引きます。 引数は Bigint であってもなくても構いません。 戻り値は Bigint です。

Bigint.mul( a, b )

ab を掛けます。 引数は Bigint であってもなくても構いません。 戻り値は Bigint です。

Bigint.mulmod( a, b, m )

m での、 ab の積の既約値。 引数は Bigint であってもなくても構いません。 ただし法は正でなければなりません。 戻り値は Bigint です。

主に内部的に使用されるメソッド

Bigint._add_typeN, Bigint._sub_typeN

Bigint 型の第一の引数に、第二の引数を足す、または引く。 引数は両方とも非負で、 第一引数 Bigint、第二引数 Number 型の整数、 戻り値は Bigint

Bigint._strsub

第一の引数から第二の引数を引く。 引けないときは未定義値を返す。 引数は両方とも文字列。 戻り値は文字列。

プロトタイプ .getBitWidthS()

そのオブジェクトの大きさを、2を底とする対数で返します。 戻り値は文字列であり、 引数で渡された位までの小数を含みます。 必要なら小数部末尾に1つ以上のゼロが付きます。

プロトタイプ .toDecimalString(), .toBinaryString()

オブジェクトを、分かち書きしない10進数または2進数の文字列に変換したものを返します。 引数が true でなければ、符号は無視されます。

Bigint.serio()

ライブラリの構築に使われる内部的関数です。 多くの「公開的」関数が Bigint.serio() を呼び出すため、 その実装の意味を説明しておきます。

serio は「真剣に Bigint」を構成する関数です。 引数が有効である限り、必ず新しい Bigint オブジェクトを返します。 引数が既に Bigint のときは実体をコピーします。 引数が Bigint でなければ、そのままコンストラクタに渡されます。 引数が無効であれば、コンストラクタから未定義値が返されます。 何を渡されるか分からない「公開的」関数では、内部的にまずこの Bigint.serio() が呼ばれ、 渡された引数を破壊することなしに、後続の操作で作業変数が Bigint であることを保証します。 ライブラリを使うユーザは「真剣に」使うわけではなく、 Bigint を操作対象とする関数に Bigint のみならず、数値を表す文字列や数値を渡すかもしれませんが、 その場合に自動で型変換を行うのが serio です。 下線から始まる「内部的」関数では、Bigint.serio() の呼び出しが省かれます。 「内部的」関数はすべて初めから「真剣に」動作しており、相手が予期する型を自分で渡すからです。 「内部的」関数は型に関するチェックをしないだけでなく、 内部的な約束事の元で動作するので、通常は直接呼び出さないでください。

Bigint.number()

new Bigint() と同じ働き。

[index]