使用for循环计算Pi

E.O*_*.O. 0 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;
Run Code Online (Sandbox Code Playgroud)

}

任何与性能相关的提示也将受到赞赏.

Dav*_*men 6

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

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