1. 円周率を 円に内接する正N角形の辺から算出

円周率の最も基本的な算出方法は、円に内接する 正N角形(Nは2の階乗)の辺から算出する方法です。Nを大きくしていき疑似的に円周に近似させ、円周率を計算するというものです。
正N角形の円に接する辺の長さは、三平方の定理を用いて計算することができます。





2.  円周率計算の考え方

(1) 正4角形の場合の円に接する三角形の斜辺の長さ
  三平方の定理から正4角形の場合の円に接する辺の長さを算出します。




(2)  正N角形の円に接する三角形の斜辺の長さ
   正N角形の円に接する辺と、正N/2角形の辺との関係を調べます。

                                                                                                                    青色の線: 半径

                                                                                                                    赤色の線: HN、HN-1、HN-2はそれぞれ直角三角形 TN、TN-1、TN-2の斜辺





3. 円周率を求めるプログラム


上記の関係式から以下の円周率を求めるプログラムが作成できます。Prologで書いています。
プログラムのダウンロード
ダウンロードして、SWI-Prolog等のPrologのコンパイラでコンパイルすれば、実行できます。

直径100の円で正64角形での辺の長さを求めたい場合、
inside_pi( 64, 100, Hypotenuse ).
実行結果は
64 3.140331156954753
Hypotenuse = 4.906767432741801
Hypotenuse は斜辺の長さです。 図では、HNを指します。
(これは、LPA-Prologでの結果です。)





このプログラムはLPA PrologとSWI-Prologで動きました。
LPA Prologは市販品(有料)ですが、28日間のFree Trialができます。 Free Trial 時には多少の制限があるみたいです。
SWI-Prologはフリーソフトです。
計算結果ですが、処理系の計算結果の丸めにより、処理系により計算結果が微妙に違ってくることが想定されます。

LPA Prolog 5.0 で直径が1の円の場合での計算結果は以下となります。

学校で習った円周率3.14は正64角形で円周率を求めた場合です。
通常の処理系の有効桁計算では、正134217728角形でほぼ円周率は収束していきます。

正N角形 正N角形の辺の長さ    Pi 円周率近似
4    2.82842712474619
8    3.061467458920718
16    3.121445152258052
32    3.136548490545939
64    3.140331156954753
128    3.141277250932773
256    3.141513801144301
512    3.141572940367091
1024    3.14158772527716
2048    3.1415914215112
4096    3.141592345570118
8192    3.141592576584872
16384    3.141592634338563
32768    3.141592648776986
 65536    3.141592652386591
 131072    3.141592653288992
 262144    3.141592653514593
 524288    3.141592653570993
 1048576    3.141592653585093
 2097152    3.141592653588618
 4194304    3.141592653589499
 8388608    3.141592653589719
 16777216    3.141592653589774
 33554432    3.141592653589788
 67108864    3.141592653589792
 134217728    3.141592653589793
 268435456    3.141592653589793

4.  面積計算の考え方
 

円の面積を求める基本的な方法は、円周率と同様に、正N角形を作り、正N角形の面積を計算し、近似的に円の面積を求めるというものです。
正N角形と正N/2角形を構成する三角形の関係から、正N角形の面積を計算します。

(1) 正4角形の場合の円に接する三角形の面積
    三角形の面積は 底辺 * 高さ / 2ですが、
  円に接する正4角形の場合、三角形の面積は 半径 * 半径 / 2




(2) 正N角形の場合の円に接する三角形の面積
正N角形を構成する三角形の面積と、正N/2角形を構成する三角形の関係を調べます。





正N角形を構成する三角形TRの面積は
三角形の面積   底辺 * 高さ / 2より
  ・ 三角形TRの面積  は  (r *  (HN-1)/2)/2

5.  面積を求めるプログラム

上記の関係式から以下の面積を計算するプログラムが作成できます。三角形の円周率を求めるプログラムの関数も三角形の高さを求めるために利用します。
プログラムのダウンロード




円の直径を2で計算した場合の計算結果は以下となります。
公式では直径2の場合は面積は 半径 * 半径 * πで
   3. 1415926535 8979323846・・
となります。
正N角形のNを大きくしていく計算結果でも、公式で計算した値に収束していることが確認できます。

正N角形 正N角形の面積(直径2の場合)
 4    2
 8    2.82842712474619
 16    3.061467458920718
 32    3.121445152258052
 64    3.136548490545939
 128    3.140331156954753
 256    3.141277250932773
 512    3.141513801144301
 1024    3.141572940367091
 2048    3.14158772527716
 4096    3.1415914215112
 8192    3.141592345570118
 16384    3.141592576584872
 32768    3.141592634338563
 65536    3.141592648776986
 131072    3.141592652386591
 262144    3.141592653288992
 524288    3.141592653514593
 1048576    3.141592653570993
 2097152    3.141592653585093
 4194304    3.141592653588618
 8388608    3.141592653589499
 16777216   3.141592653589719
 33554432    3.141592653589774
 67108864    3.141592653589788
 134217728    3.141592653589792
 268435456    3.141592653589793
 536870912    3.141592653589793


円の面積の公式
  半径 * 半径 * π
  イメージとしては、こんな感じではないでしょうか?





6.  Prologの開発環境


実際のProlog開発で使用する環境は、プログラム作成を行いやすくしています。
Prologでの作業がイメージできるように LPA PrologとSWI-Prologの画面を貼り付けます。

(1) LPA Prologの場合、

① エディタ画面




② LPA Prologで、コンパイルし、直径 1000 で  正N角形と正N/2角形の円周率の差が0.0000000000000001以下となるまで計算させた結果は




(2) SWI-Prologの場合
フリーウェアなので、通常はこちらの方が利用しやすいと思います。もう少し、マニュアルが解りやすければ良いのですが。

① エディタ画面



② SWI-Prologでコンパイルし、直径 1000 で  正N角形と正N/2角形の円周率の差が0.0000000000000001以下となるまで計算させた結果は