next up previous
Next: A..3 参考: 色々な 公式を比較する Up: A. 課題6B解説 Previous: A..1 の Taylor 展開を用いて計算する

A..2 AGM, 代表選手 Gauss-Legendre 公式による計算

「AGM(算術幾何平均)を用いる方法」 で紹介した公式で計算してみよう。 この公式はどうしてこれで円周率が計算できるかを理解するのが難しいが、 アルゴリズムそのものは比較的単純で、 短いプログラムで計算が実行可能である。


ここでは、 鎌田伊織・吉本清夏「$ \pi$ -- 計算法の変遷 --」, 2005年度卒業研究 から拝借したプログラムを紹介する。

GaussLegendre.BAS

REM GaussLegendre.BAS --- Gauss-Legendre公式によるπの計算
REM 鎌田伊織・吉本清夏,「π-- 計算法の変遷 ---」, 2005年度卒業研究
OPTION ARITHMETIC DECIMAL_high
OPTION BASE 0
DIM A(100),B(100),T(100)
LET A(0)=1
LET B(0)=1/SQR(2)
LET T(0)=1/4
LET MAXN=10
FOR n=1 TO maxn
   LET a(n)=(a(n-1)+b(n-1))/2
   LET b(n)=SQR(a(n-1)*b(n-1))
   LET t(n)=t(n-1)-2^(n-1)*(a(n)-a(n-1))^2
   PRINT USING "### -%.####^^^^^^":n,PI-(A(n)+B(n))^2/(4*t(n))
NEXT n
LET n=maxn
LET k=(a(n)+b(n))^2/(4*t(n))
PRINT k
END

GaussLegendre.TXT

  1  1.0134E-0003
  2  7.3763E-0009
  3  1.8313E-0019
  4  5.4721E-0041
  5  2.4061E-0084
  6  2.3086E-0171
  7  1.0586E-0345
  8  1.1110E-0694
  9 -1.5022E-1000
 10 -1.5022E-1000
 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001927876611195909216420199 

わずか $ 10$ 回未満の反復で $ 1000$ 桁の精度を達成していることに注目。 合っている桁数が反復1回ごとにほぼ2倍になるという、 いわゆる$ 2$ 次の収束をしている (これは例えば、 非線形方程式の解法として紹介した Newton 法の性質と同じ) ので、 あっと言う間に $ 1000$ 桁を達成!、と言えるでしょうか。


( $ \tan^{-1}1$ の級数展開と比べると、もの凄い違いですね。)


next up previous
Next: A..3 参考: 色々な 公式を比較する Up: A. 課題6B解説 Previous: A..1 の Taylor 展開を用いて計算する
桂田 祐史
2012-06-27