トップ 一覧 Farm 検索 ヘルプ 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回目で結果が収束.