トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

Diary/2019-1-28

SDR研究会

@巣鴨.Piの金田先生のお話.

Piを計算してみる

とりあえず,紹介されてたBorweinのアルゴリズムをdoubleで実装してみた.

#include <stdio.h>
#include <math.h>

int main(int argc, char **argv){
  double a, aa;
  double y;

  a = 6.0 - 4.0 * sqrt(2.0);
  y = sqrt(2.0) - 1;

  for(int i = 0; i < 100; i++){
    double y0 = pow((1 - pow(y, 4)), 1.0/4.0);
    y = (1 - y0) / (1 + y0);
    aa = a * pow((1 + y), 4) - pow(2, 2 * i + 3) * y * (1 + y + pow(y, 2));
    printf("%02d: %.30f\n", i, 1/aa);
    if(a == aa) break;
    a = aa;
  }
  printf("result: %.30f\n", 1/aa);
}

実行してみると,

miyo@tama:% ./a.out
00: 3.141592646213547279643307774677
01: 3.141592653589792671908753618482
02: 3.141592653589792671908753618482
result: 3.141592653589792671908753618482

と,3回目で結果が収束.