言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

円周率

円周率って本当に 3.14 なのか? ふと襲われる言い知れぬ不安。今まで頼っていた足元が実は幻であったかのような奇妙な感覚に僕は囚われる。円いコップ、皿、車輪、そこに潜む円周率。永遠に続くとされる無限の数。僕の世界の多くがそれに頼っているのにも関わらず、今までの人生で円周率に疑問を抱いた事は無かった。誰かが決めた数。いにしえよりの運命。分かっちゃくれない大人の都合。そうだ、円周率を計算しよう。

アルキメデスによる円周率の計算方法は以下の通りである。

  • 円周率とは、円周 / 直径である。
  • 円を描く
  • 円の内側にぴったりくっつく正多角形(内接正多角形)を描く
  • 円の外側にぴったりくっつく正多角形(外接正多角形)を描く
  • ふたつの正多角形の周の長さを求める
  • 円周は内接多角形の周より長く外接多角形の周より短いはず。
  • 辺の多い正多角形を描けば描くほど正確な値が求まる。

なるほど、ここまでは分かるだろう。ようするに正多角形の周りの長さが分かれば円周の長さも大体求まる。しかし正多角形と簡単に言うけど、正六角形みたいな単純なやつ(半径×6 です。念のため)ならまだしも、辺を増やして正100 角形や正200角形なんてどうやって描くのだ。描いたところで、定規で測るには無理がある。

ここは計算で解決しよう。正 n 角形の周が分かっている時、正 2n 角形の周を計算で求める事は出来無いだろうか。もしも出来れば、正六角形、正12角形、正24角形というように、繰り返し計算していって好きなだけ細かい多角形の周を求める事が出来る。


  • 図のように、半径 1 の内接正 n 角形を描く
  • 正 n 角形の一辺の半分を a とする。
  • 正 2n 角形の一辺の半分を b とする。
  • AC の中点Q より OC に垂線 QR を引く
    • AP と QR は平行なので PR = RC
    • 1 = OP + 2 * RC
  • ピタゴラスの定理より。
    • 1 = a^2 + OP^2
    • b^2 (a/2)^2 + RC^2
  • 方程式を解くと
    • b =\frac{\sqrt{1-\sqrt{1-a^2}}}{\sqrt{2}}

x が n 角形の一辺/2(即ち n角形の周 / (2n)) なら、2n 角形の一辺はこうなる。

NextPoly[x_] := Sqrt[ 1 - Sqrt[1 - x^2] ]/Sqrt[2]

これを次々実行していく(ヘタレなので mathematica)

  • 半径1(直径2)の内接正六角形から内接12角形: a = 1/2 の時、正12角形の一辺の半分 b を求める
    • NextPoly[1/2] //N => 0.258819
  • 多角形の周/直径は b * 2 (一辺の半分だから)* 12(12角形だから) / 2(直径2だから) = b * 12 なので、
    • NextPoly[1/2] * 12 //N => 3.10583
  • 内接正12->24 角形:
    • NextPoly[NextPoly[1/2] ] * 24 //N => 3.13263
  • 内接正24->48 角形:
    • NextPoly[NextPoly[NextPoly[1/2] ] ] * 48 //N => 3.13935
  • 内接正48->96 角形:
    • NextPoly[NextPoly[NextPoly[NextPoly[1/2] ] ] ] * 96 // N => 3.14103
  • 内接正96->192 角形:
    • NextPoly[NextPoly[NextPoly[NextPoly[NextPoly[1/2] ] ] ] ] * 192 //N => 3.14145

アルキメデスは少なくともこの正96角形による円周率を知っていたらしい。本当は内接正多角形だけでなく、外接の方も計算して挟み撃ちにしないとどれくらい近づいたか分からないのだが、とりあえず雰囲気が分かっただけで安心した。しかし、問題は、円周率を求めるためには√の計算が必要だという事だ。これも無理数。√を自分で計算せずにどうやって円周率を信用しろと言うのだ。

参考