したがって、Chudnovskyアルゴリズムに従って円周率を計算するためのC++コードを次に示します。
#include <iostream>
#include <cmath>
#include <iomanip>
int fact(int digit)
{
int result = 1;
for (int i=digit; i>1; i--)
{
result *= i;
}
return result;
}
int main()
{
long double pi = 0.0;
int precision = 10;
for ( int k=0; k<=precision; k++)
{
pi += ( pow(-1, k)*fact((6*k))*(13591409+545140134*k))/(fact(3*k)*pow(fact(k),3)*pow(640320, (3*k+1.5)));
}
pi = 1.0/(12*pi);
std::cout<<std::setprecision(80)<<pi<<'\n'<<M_PI<<'\n';
}
問題は、このコードがPI番号の右桁15桁のみを返し、その別の部分がガベージであるということです...精度変数が12以上に設定されている場合、-nanを返します。誰かがそれを手伝ってくれる?TIA
編集:Ubuntu 12.10 x64、gcc 4.7.2