!SDR研究会 @巣鴨.Piの金田先生のお話. !Piを計算してみる とりあえず,紹介されてたBorweinのアルゴリズムをdoubleで実装してみた. #include #include 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回目で結果が収束.