円周率の情報媒体としての利用性
はじめに
今日では、円周率における各数の出現頻度がほぼ均一であることから、完全に乱数のような分布をしていることが発見され、任意の有限自然数列が含まれていると予想されている[1]。このことから、円周率の中には任意の情報が含まれており、今後は円周率が記憶媒体となりうるのではないか、と予想する者も居る[2]。
しかし、直感的に、情報量が多くなるほど円周率の中での桁数が多くなり、本来のデータを表すのに必要な数を超えてしまうのではないかと思われる。今回、円周率の中にASCIIコードで表されたアルファベットが何桁目に現れるかを調べることで、この仮説を検証する。
手法
まず、円周率5億桁のtxtファイルを用意する。コードは
GMP の使い方
の4.1に依る。[3]
次に、円周率の中で何桁目に現れるかを調べるRubyファイルを作成した。例えばAならば65,AAならば6565が円周率の第何位にあるかを示すものである。コードは以下。
File.open("../pi5oku.txt", "r") do |file| ary = file.readlines pis = ary[1] ("A".."Z").each do |str| str_num = str.bytes[0].to_s pos = pis.index(str_num) puts "#{str} is at #{pos}" end ("AA".."ZZ").each do |str| str_num = str.bytes[0].to_s<<str.bytes[1].to_s pos = pis.index(str_num) puts "#{str} is at #{pos}" end ("AAA".."ZZZ").each do |str| str_num = str.bytes[0].to_s<<str.bytes[1].to_s<<str.bytes[2].to_s pos = pis.index(str_num) puts "#{str} is at #{pos}" if pos == nil n += 1 end end ("AAAA".."ZZZZ").each do |str| str_num = str.bytes[0].to_s<<str.bytes[1].to_s<<str.bytes[2].to_s<<str.bytes[3].to_s pos = pis.index(str_num) puts "#{str} is at #{pos}" if pos == nil m += 1 end end end
なお、この中で大文字のアルファベットの連続したもののみを用いたが、これは小文字にするとASCIIコードが3桁になり、不必要に桁数が多くなるからである。
結果
各文字数について以下のようになった。なお、二文字以上の場合については、頭文字で分類している。
1文字
2文字
3文字
4文字
平均(指数グラフ)
考察
まず、各文字数内での比較について見ると、文字数が多くなるにつれて頭文字間の差が小さくなり、乱数様分布をしていることが確認できる。
一方、平均値についてのグラフを見てみると、指数グラフでおよそ直線上になっており、出現位置は文字数nのとき100^n桁目となることが予想される。
従来の表現様式では文字数に比例したものになることから、円周率による情報表現は有効でないと結論できる。
今回の検証では、なぜ小数第100^n位程度にあるかが不明なままなので今後の研究に期待したい。
Acknowledgement
I want to thank all the people who helped me.
参考文献
1 金田研究室HPhttp://pi2.cc.u-tokyo.ac.jp/pi-decimal_current-j.html 訪問日2014/01/26
2 円周率SUGEEEEEEEEEEE 訪問日2014/01/26
3 GMP の使い方 訪問日2014/01/26