SSブログ

十進BASICとマチンの公式を用いて円周率πを100桁求める [数値解析]

十進BASICとマチンの公式を用いて円周率πを100桁求める

 

円周率πの近似値を100桁求めたところで何の役にも立たないけれど、十進BASICを使って、πの近似値を100桁求めてみた。

計算結果は次の通り。

 

Π=3.

14159 26535 89793 23846 26433 83279 50288 41971 69399 37510

58209 74944 59230 78164 06286 20899 86280 34825 34211 70679

82148 08651

 

すこし余分を見て、110桁まで表示してある。

 

この計算に使用したプログラムは次の通り。

 

REM Machiの公式を用いたπの近似計算

OPTION ARITHMETIC DECIMAL_HIGH

LET n=100

LET S=0

LET FMT$="#."&REPEAT$("#",110)

PRINT USING fmt$

FOR k=1 TO n

LET A=(-1)^(k-1)/(2*k-1)

LET B = 4/5^(2*k-1)

LET C = 1./239^(2*k-1)

LET S = S + 4*A*(B-C)

NEXT k

PRINT USING fmt$:s

END

 

 

これをプログラムと呼ぶのが恥ずかしい。

計算効率も悪いし・・・。

プログラムのわかりやすさ(可読性)を重視したということで、この点は大目に見てもらおう。

 

これくらいの計算回数ならば計算速度は問題にならないけれど、計算速度を重視するならば、FOR NEXTループのべき乗計算は絶対に避けるべき。

たとえば、

このべき乗計算は

という漸化式に書き換えることができる。

 

だから、たとえば、次のように書き換えたほうがいいと思うにゃ。

 

 

REM Machiの公式を用いたπの近似計算

OPTION ARITHMETIC DECIMAL_HIGH

 

LET N=100

LET S=0

LET S5=1/(5*5)

LET S239=1/(239*239)

LET f=1

LET B=1/5

LET C=1/239

 

FOR K=1 TO N

LET A=f/(2*k-1)

LET S = S + A*(16*B-4*C)

LET f=-f

LET B = S5*B

LET C = S239*C

NEXT k

 

LET FMT$="#."&REPEAT$("#",110)

PRINT USING fmt$

PRINT USING fmt$:S

 

END

 

 

FOR NEXTループの反復回数nを100万くらいすると、おそらく、計算速度の違いを体感できると思う。

 

このプログラムを使って、1000桁まで計算をしてみたのだが、996桁目の値が異なってしまった。十進BASICの1000桁の精度を誇る、計算拡張モードを使ったのだけれど、このあたりが十進BASICで計算できる円周率πの限界のようだ。

 


nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。