円周率を求める冴えたやり方

[結] 中間数(mediant)を使った、小数の既約分数表現 - 結城浩の日記を拝読して 思い出したことを書いてみます。

与えられた小数を表現する既約分数を見つけるプログラムとその実行結果が書いて あります。中でも円周率を与えた時の実行結果を見るにつけ、あらためて思い出しまし た。22/7 と 355/113 は、その周辺に比べて突出して精度が高いのですよね。 22/7 や 355/113 を円周率としましょう、という提案は歴史的にも有名であるはずです。 アドリアン・メティウス(1527〜1607)は、355/113 を発見していますし、祖沖之 (そちゅうし 429〜500)も同様に 355/113 を発見しています。この辺の事情は、 π の不思議 に詳しく載っています。アルキメデスは 223/71 を発見していますがこれも結城浩さんの 実行結果の表にのっています。昔の賢人は本当に素晴らしい仕事をしていますね。

355/113 は数字が6桁ですが、アポロで月まで行く時に使った円周率の近似値は 3.1416 で済んでしまったそうですから、現代科学に 355/113 を使ってもお釣りが来ます。何故か 憶えやすい数字のならびですしね。分母から順番に 113 355 ですから。

円周率などの超越数連分数として表示した時に、ちょうと都合の良いところで 連分数展開を打ち切ると 22/7 や 355/113 が得られるとのことです。精度が良くなりそうな ところってあるのですね。打ち切りの見分け方は、355/113 の謎(PDF) に書いてあります。また、円周率の連分数展開を詳細に記したページとしては、連分数表示があります。7 や 15 や 292 の当たりが突出しているのがわかりますが、ここが打ち切りのタイミングです。なお、連分数展開には最良近似という性質があり,無理数を有理数で近似するよりも高い精度で近似することができるということが証明されているようです。

とまぁ。思い出したのですけれど。あぁそうだ、もうひとつ連想。円周率の少数を16進数展開する時にですね。任意の桁のひとつの数字(0〜F)を計算する公式があるのです。たとえば10進で7891桁目とか。この公式では、1桁目から7890桁目までは不要ですし、7891桁めを計算をしても、1桁目から7890桁目はわからない。ただ、単に7891桁目が求まるのです。ちょっと数学をかじっていて求積法やら微積分やら級数展開やら無限和やら勉強している人には驚異かもしれませんね。この公式を知っていれば、どこかのスーパーコンピューターが性能を誇示して円周率を2000億桁計算したと発表した時に2000億プラス1桁目だけを計算できるかもですね。で、いばると。あ、この公式の少数は16進展開でしたね。まぁなんとかなる範囲でしょう。参考文献を下記に。

An algorithm which allows digits of a given number to be calculated without requiring the computation of earlier digits. というところが興味深いですし、Amazingly, this formula is a digit-extraction algorithm for Pi in base 16. あたりでは、驚愕を共感せざるを得ません。