大きな数の計算機

浮動小数点の限界を超える整数演算: 算術、累乗、根、階乗、最大公約数、最小公倍数、素因数分解。100! は158桁すべてを正確に表示します。

01 計算機

入力すると結果が更新されます。Ctrl/Cmd+Enterで主な結果をコピー。

結果

    途中式を表示

      大きな数の計算機は、通常の浮動小数点計算機では保持できない値に対して、正確な整数演算を行います。加算、減算、乗算、除算、剰余、累乗、整数根、階乗、最大公約数、最小公倍数、試行素因数分解はすべて、科学的近似値ではなく完全な桁列を返します。桁数と任意の精度設定が各結果に付くので、答えの大きさが一目で分かります。

      計算はすべてブラウザ内で実行されます。入力内容がサーバーに送られることはありません。

      標準精度を超える数で計算する

      Concept diagram: 入力 leads to with numbers beyond standard… leads to 結果入力with numbers beyondstandard…結果
      標準精度を超える数で計算する.

      任意精度整数は、メモリが許す限り大きくなります。10進の桁列、または16進や2進入力が便利なときは 0x / 0b プレフィックス付きでオペランドを入力し、演算を選びます。主出力は正確な結果です。副フィールドには桁数が表示されます。

      暗号や組合せ論が気にするはるか前から、標準計算機は正確さを失います。階乗、大きな累乗、多数の項の積は IEEE 浮動小数点を無限大へ溢れさせたり、下位桁を丸めたりします。このツールは整数結果のすべての桁を保持するのが、このページの目的です。

      通常の計算機が精度を失う理由を理解する

      Concept diagram: 入力 leads to where standard calculators lose… leads to 結果入力where standardcalculators lose…結果
      通常の計算機が精度を失う理由を理解する.

      IEEE-754 倍精度は約15から17桁の有効10進桁を保持します。2⁵³ (9,007,199,254,740,992) より大きい整数はすべて double で正確に表現できません。その先では奇数整数は近くの偶数へ丸められます。double を使う電卓やスプレッドシートのセルは、大きな整数で静かに誤ります。

      2^53 = 9007199254740992   double が正確に保持する最後の連続整数
      2^53 + 1                  double では 2^53 と区別できない

      浮動小数点の乗算と除算は、小数結果でも丸め誤差を生じます。大きな数の計算機は big-integer 演算を使うことで、整数演算ではその種の誤差を避けます。非整数根と除算は、結果が本質的に有限桁列ではないため、精度設定が必要です。

      非常に大きな整数で算術演算を行う

      Concept diagram: 入力 leads to Run arithmetic on very large… leads to 結果入力Run arithmetic on verylarge…結果
      非常に大きな整数で算術演算を行う.

      加算、減算、乗算、除算、剰余は数百桁または数千桁のオペランドを受け付けます。除算は整数商を返します。剰余はエンジンの通常の符号規則に従います。100桁の2数を乗算すると、最大200桁の積が得られ、科学的記数法が中間を隠しません。

      借位と繰り上がりは手計算と同じ規則に従い、桁配列全体に拡張されます。宿題やプログラミングコンテストで一般的なサイズでは性能は対話的です。数万桁の病理的入力では、ブラウザが処理中にタブが一時停止することがあります。ページが応答しなくなったら、より小さな例でキャンセルして再試行してください。

      累乗、根、階乗を計算する

      Concept diagram: 入力 leads to powers, roots and factorials leads to 結果入力powers, roots andfactorials結果
      累乗、根、階乗を計算する.

      累乗は非負整数指数の base^exponent を計算し、正確な整数結果を返します。整数平方根は真の根の床関数を返し、剰余を表示できます。階乗 n! は 1 から n までのすべての整数を掛け合わせ、完全な桁列を返します。100! は158桁あり、double が正確に保持できる範囲をはるかに超えます。

      100! は158桁です。 先頭桁は 9332621544… で、完全な文字列は手書きには長すぎます。だから計算機があるのです。桁数だけで多くのコンテスト確認に答えられます。100! が256ビットレジスタに収まるかという問題では、158の10進桁はすでに十分に判断できます (256ビットは最大78の10進桁しか保持しません)。

      nn! (末尾形式)桁数
      103,628,8007
      202,432,902,008,176,640,00019
      50(長い)65
      100(長い)158

      負の階乗は整数に対して未定義です。非常に大きな n は最終的にブラウザのメモリを使い果たします。ツールは切り詰めた値を返すのではなく、失敗を報告します。

      最大公約数と最小公倍数を求める

      Concept diagram: 入力 leads to greatest common divisor and lowest… leads to 結果入力greatest common divisorand lowest…結果
      最大公約数と最小公倍数を求める.

      最大公約数はユークリッドの互除法を使います。大きい方を除算の剰余で置き換え、剰余がゼロになるまで続けます。最後の非ゼロ剰余が最大公約数です。最小公倍数は LCM(a, b) = |a × b| / GCD(a, b) から求め、積が溢れないよう big-integer 乗算を使います。

      互いに素な整数の最大公約数は 1 です。分数やアスペクト比の約分は両項への最大公約数除算です。アスペクト比計算機がその UI を担当し、このページは任意整数向けに生の最大公約数と最小公倍数演算を公開します。1920 と 1080 を入力すると最大公約数 120 が得られ、Full HD フレームを 16:9 に約分するのと同じ因子です。

      大きな数の素因数を求める

      Concept diagram: 入力 leads to prime factors of a large number leads to 結果入力prime factors of alarge number結果
      大きな数の素因数を求める.

      試行除法は小さな素因数を剥がし、残りの余因子が素数になるか探索限界に達するまで上方へ続けます。2つの大きな素数からなる半素数が難しいケースです。試行除法はブラウザで対話的に終わらず、ページは黙ってハングするのではなくその限界を明示します。

      入力因数
      122² × 3
      9797 (素数)
      1,0017 × 11 × 13

      計算機は限界を正直に述べます。小さな因数を持つ数は素早く因数分解されます。RSA 法のような構成の数は対話時間内に終わらず、それは想定どおりです。暗号はその困難さに依存しています。中程度の合成数を扱う教育やコンテスト問題では、因数分解ビューで十分です。

      非厳密な結果の精度を設定する

      Concept diagram: 入力 leads to precision for non-exact results leads to 結果入力precision for non-exactresults結果
      非厳密な結果の精度を設定する.

      完全平方数でない数の平方根と、整数に収まらない除算には精度設定が必要です。丸める前に計算する有効桁数です。桁列が扱いにくい非常に大きいまたは非常に小さい量には科学的記数法が使えます。

      整数のみの演算は精度制御を無視します。答えが有限だからです。モードの混同はよくある間違いです。精度を 10 に設定しても 100! は切り詰められません。階乗は依然として158桁すべてを返します。精度は近似演算にのみ適用されます。

      実務で大きな数を使う

      Concept diagram: 入力 leads to big numbers in practice leads to 結果入力big numbers in practice結果
      実務で大きな数を使う.

      暗号は鍵サイズをビットで語ります。2048ビット RSA 法剰はおおよそ617桁の10進整数です。組合せ論は階乗と二項係数を生み、64ビットレジスタをすぐに超えます。競技プログラミング問題はしばしば素数を法とする答えを求め、約分前には依然として大きな中間積が必要です。

      言語が組み込み big-integer 型 (Python int、Java BigInteger、JavaScript BigInt) を提供するとき、この計算機はそれらのプログラムを確認するメモ帳です。言語が double に縛られているとき、計算機は正確な値が何であったべきかの参照になります。

      よくある質問

      通常の計算機は大きな整数でなぜ失敗しますか?

      double は約15から17桁の有効桁しか保持せず、2⁵³ より大きいすべての整数を表現できません。大きな整数は丸められるので、表示は正確に見えても下位桁は誤ります。

      100! は何桁ですか?

      100! は158桁です。大きな数の計算機は完全な整数を返し、副フィールドでその桁数を報告します。テストで使うエンジンフィクスチャと一致します。

      任意精度とは何ですか?

      任意精度とは、64ビットのような固定レジスタに収めるのではなく、必要に応じて桁数が増えることを意味します。メモリが尽きるまで、整数演算の結果は正確です。

      最大公約数はどのように計算されますか?

      ユークリッドの互除法は、大きい方を小さい方で割った剰余で繰り返し置き換え、剰余がゼロになるまで続けます。最後の非ゼロ剰余が最大公約数です。最小公倍数はその後、積を最大公約数で割って求めます。

      計算機は任意の数を因数分解できますか?

      いいえ。試行除法は小さな素因数を持つ数を扱います。RSA で使われる種類の2つの大きな素因数からなる半素数は、ブラウザで対話時間内に因数分解できず、ページもそう装いません。

      累乗は常に正確な結果を返しますか?

      非負整数指数の整数累乗は正確な整数を返します。分数指数と非整数根は精度設定を使い、丸めることがあります。負の指数は一般に整数ではない逆数を生じます。

      どの入力形式が受け付けられますか?

      10進桁列がデフォルトです。プレフィックス 0x0b で、同じ演算に16進と2進整数入力が使えます。桁区切りのカンマは不要で、フィールドパーサーによっては拒否されることがあります。

      計算はサーバーにアップロードされますか?

      いいえ。big-integer 処理はブラウザ内で実行されます。大きな中間値は端末から出ません。オペランドが宿題の鍵やローカル実験データから来るときに重要です。

      JavaScript BigInt との関係は?

      エンジンは BigInt と同じ精神で big-integer 演算を使います。正確な整数、浮動小数点の丸めなし。このページは桁数、階乗、因数分解ヘルパーを付けた UI です。

      いつ精度を上げるべきですか?

      比較や印刷により多くの有効桁が必要なとき、根と非厳密除算の精度を上げてください。整数階乗、最大公約数、剰余演算はその設定を消費しません。

      まとめ

      大きな数の計算機は、double がおおよそ15桁の有効数字と 2⁵³ を超えて桁を失う場所で、正確な整数結果を保持します。算術、累乗、階乗、最大公約数、最小公倍数、試行因数分解はローカルで実行され、100! は158桁の整数として報告されます。精度制御は非整数根と除算にのみ適用されます。暗号規模の因数分解は対話的試行除法の範囲外であることを認めています。

      関連計算機

      2進数計算機 · 十六進数計算機 · IPサブネット計算機