使用for循环计算Pi

时间:2011-07-08 15:47:06

标签: c++ for-loop pi

我刚刚制作了一个计算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;

}

任何与表现相关的提示也将受到赞赏。

4 个答案:

答案 0 :(得分:6)

你正在使用Leibniz系列,它非常非常慢地收敛。在诸如您正在使用的交替序列中,第一个省略的术语提供了对估计误差的良好估计。您的第一个省略的术语是4/2000005,因此您应该期望精度低于六位有效数字。

注意:舍入错误,使用双精度数字与此处缺乏精度无关。唯一的因素是你使用的是蹩脚的算法。

答案 1 :(得分:4)

lots of methods来计算pi。有些人比其他人收敛得快。

另见"Modern Formulae"

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万次迭代后结果错误,因此您将无法通过更多循环获得正确答案,只会添加更多错误。