円周率を求める公式

4000桁の円周率を求める公式の説明です。

前田稔(Maeda Minoru)の超初心者のプログラム入門

公式の説明

  1. 計算には次の Machin の公式を使います。

  2. ここで問題となるのが Arctan() 関数ですが、幸いにして収束が速く高精度で計算できる公式があります。
    この公式を利用して、自前で高精度の Arctan() 関数を作成するのが最大の難関です。

  3. Arctan(X) の X の値は 1/5 と 1/239 ですが、級数展開した公式を見ると X**3, X**5, X**7 ... と急速に値が小さくなっているでしょう。
    つまりこの展開式を使えば、少ない繰り返し回数で精度の良い結果を得ることができます。
  4. この展開式で使用するメソッドを考察してみましょう。
    忘れてはならないのは4000桁まで計算しなければならないことです。
    1. 4000 桁同士の加算や減算は簡単でしょう。
      y[S] と z[S] を足して x[S] に格納します。
              //★ x[]= y[] + z[]
              void    add(short x[], short y[], short z[])
              
    2. y[S] から z[S] を引いて x[S] に格納します。
              //★ x[]= y[] - z[]
              void    sub(short x[], short y[], short z[])
              
    3. 4000 桁を一桁の整数で掛けるのは比較的簡単です。
      y[S] を一桁の n で掛けて x[S] に格納します。
      筆算と同じ要領で、下位の桁から桁上がりを考慮してプログラムして下さい。
              //★ x[]= y[] * n
              void    mlt(short x[], short y[], short n)
              
    4. 最もやっかいなのが次の計算です。
      X**3, X**5, X**7, X**9, ...
      但し、X の値は 1/5 と 1/239 なので、4000 桁を三桁以内の整数で割る関数を作成します。
      y[S] を三桁以内の整数 n で割って x[S] に格納します。
              //★ x[]= y[] / n
              void    dev(short x[], short y[], short n)
              
    5. そして「おおとり」が a_tan メソッドです。
      atan(X) を計算して ans[S} に格納します。
      x[S] には 1/5 または 1/239 が格納されています。
      k には 5 または 239 が格納されています。
      n は級数展開で求める項の数です。
              //★ a_tan(x)= x - x**3/3 + x**5/5 - x**7/7 + x**9/9 - ...
              void a_tan(short[] ans, short[] x, short k, short n)
              

[Next Chapter ↓] add メソッド
[Previous Chapter ↑] 4000桁を表示

前田稔(Maeda Minoru)の超初心者の C#(Frame Work)