- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!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回目で結果が収束.