4
因此,这里是根据楚德诺夫斯基算法计算PI一些C++代码:与楚德诺夫斯基算法计算PI数
#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';
}
的问题是,此代码仅返回15的PI编号右位,它的另一部分是垃圾...当精度变量设置为12或更大时,它返回-nan。有人可以帮我吗? TIA
编辑:Ubuntu 12.10 x64,gcc 4.7.2
在需要双精度字符而不是整数字面量的地方使用双字面量。 '13591409 + 545140134 * k'应该是'13591409.0 + 545140134.0 * k',否则可能会发生整数溢出。 – 2013-02-10 12:20:10
您的因子例程很快溢出。 – 2013-02-10 12:21:06
thanx,我已经修复了它,但没有任何更改... – 2013-02-10 12:23:51