C++で扱える大きな数値は何なのかを知りたい

真っ正直に「大きな桁数の数値を扱いたい」というのなら、すでに紹介されているような、そういうものを扱える方法を探すか作るかすればいいと思います。「扱いにくい」とおっしゃいますが、それが実際に行われていることです。

ところで、そんな大きな桁数の数が必要になるのはなぜなんでしょうか。もしかして、「小数点以下1000桁目まで計算すると決めたら、小数点以下1000桁までの数をコンピュータで扱えないといけない」と考えておられるのでしょうか。

もしもそうなら、円周率を100兆桁計算する (昨年に実際に計算されています) ためには、最低でも約100テラバイトのメモリを積んだコンピュータが必要ですね。計算の途中結果のためのメモリも必要ですからその数倍は必要ということでしょうか。絶対に不可能とは言いきれませんが、ちょっと現実ばなれしていますよね。

一方、以前ネット上で少し話題を呼びましたが、円周率を一桁づつ順番に出力していくプログラムというのもあります。プログラムの短かさにも驚かされますが、その内容も驚きです。計算途中で使われる変数が全部int型なのです。しかもよく調べてみると、2400桁を出力するまでに各変数のうち一番大きくなるものでも2147483643にしかなっていません。32ビットマシンでも実行可能なのです (ただしこのアルゴリズムでは、出力する桁数に比例した量のメモリが必要です)。

円周率の計算について調べておられて、いろいろなアルゴリズムがあることもご存じだと思います。たしかにある程度の桁数まで計算しようとすれば、計算途中で大きな数を扱わなければならないケースはあります。しかしそれも、できるだけ大きくならないようなアルゴリズム上の工夫を積み重ねた上でのことです。そのあたりについても調査されてみてはいかがでしょうか。

コメントを投稿

0 コメント