10兆

円周率は10兆桁以上計算されているそうです。計算するアルゴリズムはとてつもないものだと思いますが、その結果を保存しておくだけでも大変なことではないだろうかと思い、試しに10兆桁の数字を保存しておくのにどのくらいのディスク容量が必要か考えてみました。


まず、単純に文字として保存するという方法で考えます。一般的な文字コードでは数字1桁は1バイトですので、10兆桁の数値だと10兆バイトとなります。10兆バイトは1024で割って約97億6563万キロバイト。更に1024で割って約954万MB、更に1024で割って約9313GB、最後にもう一回1024で割って≒9.09TBとなりました。ちょっとしたHDDレコーダー4つ半分の容量が必要となります。


もう実践的に少し考えてみます。通常1バイトは8ビットの情報量を持っていて、8ビットは2の8乗つまり256通りの数を表すことができます(以下「2の8乗」を「2^8」と表記します)。バイト数が増えると表すことができる数は掛け算で増えていきます。例えば、2バイトだと 2^16通り(=65536) 、3バイトだと 2^24(=16777216) …となります。nバイトだと「2の8*n乗」通りということになります。


先ほどの10兆桁の数を保存するには「10の10兆乗」通りの数を表すだけの情報量が必要となります。これが2の何乗に相当するかが解れば、必要なバイト数が解ることになります。つまり、10^10兆 = 2^x となるxを求め、8で割った数が必要なバイト数です。そのようなxを求めるには、中学か高校(小学校だったような気もします)で習ったおなじみの log を使います。両辺のlogを取って log (10^10兆) = log (2^x) 。指数を出して 10兆 * log 10 = x * log 2 。log2 で割って x = 10兆/log 2 となります。log2の近似値はさすがに皆様の頭に入っていることでしょう、約0.3010です。よって x = 10兆/0.3010 ≒ 33兆2225億 bit 、8で割って約4兆1528億バイト≒3.81TBとなります。先ほどの9.09TBの約42%といったところでしょうか。


別の見方をしてみます。2^8=10^y となるyを求めることで「1バイトが10進数で何桁分の数値を表すことができるか」を求める事ができます。先ほどと同じように計算すると y ≒ 2.408 つまり1バイトは10進数で2.4桁分の数値を表すことができるわけです(2^8=256ですので、2ケタより大きくて3桁よりは小さいことから実感できると思います)。逆に言えば、10進数で1桁の数値を表すのに1/2.4 バイトが必要ということになります。1/2.4 ≒ 0.42 これが先ほどの42%と一致していることにお気づきでしょうか?