BigInteger

BigInteger

> リークスクリプト

BigInteger は、アップデート 2.48 で追加された LeekScriptです。既存の他の型と互換性のある新しいプリミティブ型で、特にビットマップの作成と最適化を容易にするためのものです。

定義

BigInteger は、Integer とほぼ同じように振る舞いながら、はるかに大きな値を扱える整数です。通常の Integer は 64 ビット(263-1)に制限されていますが、BigInteger は最大 1 048 576 ビット(220)、すなわち約 315 000 桁の 10 進数を格納できます。この上限を超えると、計算は OUT_OF_MEMORY エラーで失敗します。

注: この型は既存の型をあらゆる場面で置き換えることを目的としたものではありません(オペレーションのコストが高く、メモリも多く使います)。イービル・パンプキンの謎解きにも役に立ちません。

使い方

宣言

数値を BigInteger として指定するには文字 L を使います。リテラルを読みやすくするための区切り文字 _ も使えます。

var a = 1L var b = 0b111L big_integer c = 5 big_integer d = -3L var e = 1_000_000L

コンストラクタ BigInteger() は 0 の BigInteger を作り、演算子 instanceof で値の型を調べられます。

var x = BigInteger() debug(x instanceof BigInteger) // true

注意:大きな数が自動的に検出されることはありません。接尾辞 L がなければ、Integer に収まらないリテラルは(精度を失って)Real になります。BigInteger を作るのは接尾辞 L または型 big_integer だけです。

var a = 123445321324234567895431235648945674894561564523489756489 // Real : 1.2344532132423457E56 var b = 1 >>>> と同じように振る舞います(算術シフト:符号は保持されます)。演算子 / は他の数値と同様に動作して Real を返し(15L / 4L3.75)、整数除算を行うのは \ だけです(15L \ 4L3`)。 BigInteger を含む演算の結果は、ほとんどの場合 BigInteger 型になります。

var a = 5.0 + 5L // BigInteger var b = 123456789123456789L % 234567 // BigInteger

オペレーションメモリのコストはオペランドのサイズに比例し、\%* では両オペランドのサイズの積に比例します。

var a = 2L * 200_000 // 約 1 221 000 オペレーション:結果は 200 001 ビット var b = 2L * 200_000_000 // ほとんどコストがかからない……なぜならクラッシュするから:結果が 1 048 576 ビットの上限を超える(OUT_OF_MEMORY)

表示

非常に大きな数は、計算量を減らし表示があふれるのを防ぐために途中が省略されます(関数 binStringhexString は調整されたコストで全体を表示します)。

debug(1L >>>>` よりもオペレーションのコストが低い関数 setBittestBit を使うのがよいでしょう。

その他の便利な関数