円周率を計算するためのChudnovsky アルゴリズムを実装しようとしています。
これが私の実装です:
int fact(int n)
{
if(n<=1)
return 1;
else
return fact(n-1)*n;
}
double calcPi(long n)
{
double z=0;
for(int k=0; k<n; k++)
{
z+=(pow(-1, k)*fact(6*k)*(13591409 + 545140134.0*k))/(fact(3*k)*pow(fact(k), 3)*pow(640320.0, 3.0*k+3.0/2));
}
z*=12;
return 1/z;
}
私は小さなエラーに遭遇しています。12 より大きい N の値を差し込むと、-nan が得られます。これは、限られた精度、ある種の整数オーバーフロー、または絶対にひどい階乗の実装に関係していると推測しています (はい、私は怠け者で再帰を使用していました。今は午前 2 時です)。
とにかく、以前にこれを経験したことがあり、簡単な修正を提案できるなら、それは素晴らしいことです.
多分私はPythonを使うべきで、オーバーフローについて心配するのをやめるべきです.
明けましておめでとうございます!