大きな整数の正確な計算機|BigIntで桁数無制限の加減乗除・べき乗
桁数の多い巨大な整数同士を誤差なく正確に計算する無料ツールです。JavaScriptのBigIntを使用し、9,007,199,254,740,991(2の53乗-1)を超える整数でも加算・減算・乗算・整数除算(商と余り)・べき乗を厳密に計算できます。
なぜ2の53乗を超えると誤差が生じるのか
通常の電卓やJavaScriptの数値型(Number)は、2の53乗(Number.MAX_SAFE_INTEGER)を超えると隣り合う整数の区別がつかなくなります。BigIntを使えばこの限界を超えて正確に計算できます。
| Number.MAX_SAFE_INTEGER | 9,007,199,254,740,991(253 − 1) |
|---|---|
| 9007199254740992 + 1 | Number: 9007199254740992 (誤り) / BigInt: 9007199254740993 (正確) |
大きな整数の正確な計算とは
通常の電卓やプログラミング言語の数値型(JavaScriptのNumberなど)は、2の53乗-1(9,007,199,254,740,991)を超える整数を正確に扱えず、桁が大きくなるほど丸め誤差が生じます。大きな整数の正確な計算とは、この限界を超えて何桁でも誤差なく加減乗除・べき乗を行うことです。
本ツールはJavaScriptのBigInt型を使って計算するため、桁数に実質的な上限がなく、暗号や競技プログラミングで扱うような数百桁の整数でも厳密な結果を返します。整数除算では商と余りを同時に表示し、べき乗では巨大な結果になりやすいため指数に安全な上限を設けています。
大きな整数計算機の使い方
- 1つ目の整数(A)を入力する 計算したい整数を入力します。桁区切りのカンマが含まれていても自動で除去されます。
- 演算子を選ぶ 加算・減算・乗算・整数除算(商と余り)・べき乗の中から行いたい演算を選びます。
- 2つ目の整数(B)を入力する 演算に必要なもう一方の整数を入力します。べき乗の場合はBが指数になります。
- 結果を確認する 入力に応じて結果と桁数がリアルタイムで表示されます。整数除算の場合は商と余りが両方表示されます。
使いこなすためのヒント
- 通常の電卓や表計算ソフトの数値型は2の53乗(約900兆)を超えると誤差が生じますが、このツールはBigIntを使うため桁数無制限で正確に計算できます。
- 整数除算(÷)では商だけでなく余りも同時に表示されるため、暗号やハッシュ計算で使う剰余演算の検算にも便利です。
- べき乗の指数が大きすぎるとブラウザが応答しなくなる恐れがあるため、安全のため指数は100万までに制限しています。
- 入力欄にはカンマ区切り(例:
1,234,567)を含めても自動で除去してから計算するので、桁区切り付きの数値をそのまま貼り付けられます。 - 「サンプルを入力」ボタンを押すと、2の53乗を超える巨大な整数の計算例が自動入力され、通常の電卓との違いをすぐに確認できます。
大きな整数計算機の活用シーン
暗号アルゴリズムの検算
RSA暗号の鍵生成など、数百〜数千桁の整数演算を伴う暗号技術の学習・検算に使えます。
競技プログラミングの答え合わせ
大きな階乗やフィボナッチ数列の遠い項など、多倍長整数を扱う問題の想定解を素早く検算できます。
巨大な数値データの誤差確認
表計算ソフトや通常の電卓で計算した結果が2の53乗を超えて誤差が出ていないか、正確な値と突き合わせて確認できます。
数学の自由研究・学習
桁数の多い数のべき乗や剰余がどのように増えていくかを、実際の数値で確認しながら学べます。
大きな整数計算に関する用語集
- BigInt
- JavaScriptで桁数に上限のない整数を正確に扱うためのデータ型です。通常のNumber型と異なり、2の53乗を超える整数でも誤差なく計算できます。
- 多倍長整数(bignum)
- コンピューターが標準で扱える整数の範囲を超えた、桁数に制限のない整数を表現する仕組みのことです。内部的には多数の桁を配列的に管理して計算します。
- Number.MAX_SAFE_INTEGER
- JavaScriptのNumber型が誤差なく安全に扱える最大の整数(2の53乗-1 = 9,007,199,254,740,991)のことです。これを超えると隣り合う整数の区別がつかなくなります。
- 整数除算
- 割り算の結果を小数にせず、商(整数部分)と余りに分けて求める計算方法のことです。負の数を含む場合、商は0方向への切り捨てで計算されます。
- RSA暗号
- 大きな2つの素数の積を鍵として使う公開鍵暗号方式のことです。2048ビット(10進で600桁超)の整数演算が使われることも珍しくなく、多倍長整数の扱いが不可欠です。
よくある質問
余談ですが ― コンピューターは「大きな数」が苦手だった
コンピューターの数値表現には長らく制約がありました。多くのプログラミング言語が標準で使う64ビット浮動小数点数(倍精度)は、整数として安全に扱える範囲が2の53乗-1(9,007,199,254,740,991)までと決まっています。これは仮数部が53ビットしかないためで、それを超える整数は表現の際に丸め誤差が生じてしまいます。当サイトの「電卓(計算機)」ツールも例外ではなく、この精度限界を持っています。
この問題を解決するのが多倍長整数(Arbitrary-precision integer、通称bignum)という考え方です。JavaScriptでは2020年頃からBigIntという新しい型がすべての主要ブラウザで標準搭載され、メモリの許す限り桁数に上限なく整数を正確に扱えるようになりました。ただし内部的には多数の桁を配列的に管理するため、桁数が増えるほど計算に時間がかかるというトレードオフがあります。
暗号分野でもこの技術は不可欠です。例えばRSA暗号の鍵は2048ビット(10進で600桁超)の整数が使われることも珍しくなく、こうした巨大な数の掛け算・べき乗剰余演算を正確に行うために多倍長整数ライブラリが世界中の暗号ソフトウェアで使われています。
競技プログラミングの世界でも、大きな階乗(例: 100の階乗は158桁)やフィボナッチ数列の遠い項を求める問題は頻出です。通常の数値型では途中から誤差が混入してしまうため、多倍長整数の扱いに習熟しているかどうかが正解率を左右することも少なくありません。