我刚刚制作了一个计算pi的程序。然而,即使有1000万次迭代,我的结果也有点不对劲。我得到3.141592 7535897831 ,而早在早就错了。它应该是3.141592 653589793238 ...
所以我的问题是:获得至少一个准确答案所需的迭代次数是多少到10 ^ -16
如果有人有兴趣,这是我的代码:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
long double pi = 4.0;
long double tempPi;
for (int i = 1, j = 3; i <= 10000000; i++, j+=2)
{
tempPi = static_cast<double>(4)/j;
if (i%2 != 0)
{
pi -= tempPi;
}
else if (i%2 == 0)
{
pi += tempPi;
}
}
cout << "Pi has the value of: " << setprecision(16) << fixed << pi << endl;
system("pause");
return 0;
}
任何与表现相关的提示也将受到赞赏。
答案 0 :(得分:6)
你正在使用Leibniz系列,它非常非常慢地收敛。在诸如您正在使用的交替序列中,第一个省略的术语提供了对估计误差的良好估计。您的第一个省略的术语是4/2000005,因此您应该期望精度低于六位有效数字。
注意:舍入错误,使用双精度数字与此处缺乏精度无关。唯一的因素是你使用的是蹩脚的算法。
答案 1 :(得分:4)
有lots of methods来计算pi。有些人比其他人收敛得快。
the sequence 1 / a converges quartically to pi, giving about 100 digits in three steps and over a trillion digits after 20 steps.
答案 2 :(得分:4)
问题是double
并不像你希望的那样准确。您甚至不能以100%的准确度表示十进制1.2。
我没有仔细查看代码,看看是否还有其他问题。
答案 3 :(得分:0)
由于舍入错误导致1000万次迭代后结果错误,因此您将无法通过更多循环获得正确答案,只会添加更多错误。