BigCalc:百万桁の電卓

大きな数はどこまであるの?

誰でも子供の頃、小学校で位取り記数法や四則演算を初めて習ったときに、大きな数とはどこまであるのか、不思議に思った経験があるでしょう。
一、十、百、千、万、億、兆、京・・・無量大数などという言葉をご存知の方もいらっしゃると思いますが、まだまだ先は続いています。
一方ところで、最近のパソコンの能力は1秒間に何億もの命令を実行し、数十から数百メガバイトの主記憶をもつものもめずらしくなくなってきていますが、扱える数の範囲は通常せいぜい十数桁の有効数字です。
Mathematica,Macsyma等の高級なソフトには任意桁数の演算機能がありますが、ちょっと遊ぶには敷居が高い感じがします。
 

計算してみよう!

このソフト「BigCalc」は、通常の卓上電卓のような簡単な操作で、何百万桁もの数を瞬時(?)に計算するものです。
そんなことに何の意味があるのかはさておいて、百万の階乗(1000000!)とか、百万の百万乗(1000000^1000000)とか、8の8の8乗(8^8^8)とかの計算をしてみてください。
さすがにこれら500万桁から1500万桁もの数字になると、PCの能力にもよりますが、結果を得るには数分またされます。
けれども、これらの桁数どうしでも加減算、あるいはこれらの数と短い(数百桁程度まで)の数との乗除算、乗除算でも100万桁以下、数十万桁程度の範囲の数どうしであれば、電卓のように指先か数字がこぼれ出す感覚、本当の「計算」をしているという充実感(?)が味わえること請け合いです。

 ダウンロードはこちら

扱える数字の形式は整数の範囲に限られ、結果の表示はデフォルトでは80桁以上の場合は、例えば1.234掛ける10の567乗(1.234E567)という浮動小数点形式(仮数部の下の桁は不正確ですが)になっていますが、末尾の桁までの正確な10進表現とすることもできます。
ただし計算の基数に2進法を採用しており、2進/10進変換に時間がかかるため10万桁以上の数字の正確な出力には残念ながら忍耐が必要です。
 

使い方

 実行ファイル(BigCalc.exe)をダブルクリックして起動すると、上下に2分割されたウインドウが現れます。
上が計算結果の出力コンソール、下が数値、演算キーなどのボタンがある入力キーボード画面です。

数値の入力は、入力キーボード画面の数値キーボタン(「0」〜「9」)を順次マウスでクリックして、「Enter」クリックで入力します
演算はスタックを使った逆ポーランド形式で実行されます。
(HP(ヒュレーットパッカード社)の昔の電卓に使われていた方式です)
2つ数値を入力して「+」、「−」、「*」、「/」などの演算キーボタンをクリックすると結果が表示されます。

例えば
 123+456 は   123「Enter」456「+」
 123の456乗 は  123「Enter」456「x^y」
 123456の階乗 は 123456「n!」
と計算します。
ループ、条件判断、ファイルからのプログラム読み込みによる実行などの機能もありますが、詳しくはヘルプを参照してください。
 

動作環境(*)

  OS     :OSはWindows95,98,NT(95は未確認)
  CPU    :Pentium推奨、486でも動作可能のはず(未確認)ですが、内部的には浮動小数点演算を多用しているためFPU搭載が必須
  メインメモリ :最低でも32Mbyteは必要、多いほど演算は早くなります。
  演算可能な桁数の上限は、基本的にはメモリ容量と演算時間が許す限り無制限ですが、2000万桁程度が実際的な上限と思われます。
  参考として、Pentium(非MMX)200Mhz、メインメモリ96Mbyteのシステムで、
 百万桁の数どうしの乗算17秒
 百万桁割る五十万桁  45秒
 百万桁の平方根    2分
 百万の階乗      6分30秒
 百万の百万乗     2分30秒
 8の8の8乗     8分20秒
  (加減算、乗除算でも一方の(除算の場合は割る方の)数字が少ない桁数の場合は、他方の数字が何百万桁でも、結果は数秒で得られます。)

(*) (2007/05/19追記)
 他所に紹介するついでに、現在の環境でどの程度のレスポンスか調べてみた。
クロックにして10倍だが、演算速度は20倍程度になり、隔世の感がある
動作環境とレスポンス
OS       Windows-XP-SP2
CPU      AMD-AthlonX2-3800+(2GHz)
メインメモリ   1Gbyte
百万桁の数どうしの乗算 0.8秒
百万桁÷五十万桁  2.7秒
百万桁の平方根   5秒
百万の階乗    18秒
百万の百万乗    8秒
8の8の8乗   23秒