我试图制作一个C ++程序来计算Pi的值,直到' n'使用Leibniz formula.
的小数位数号码' n'将由用户输入。 我成功地创造了莱布尼兹公式,但是我对后一部分遇到了麻烦,即价值精确到达' n'地方。
麻烦: - 随着越来越多的术语将继续添加,它的数字将继续变化,以便如果添加更多术语,如何判断特定数字是否已停止变化。
到目前为止编写的代码: -
#include<iostream>
using namespace std;
int main()
{
float s=0;
int w=-1;
for(float i=1;;i=i+2)
{
w=w*(-1);
s=s+w*(1/i);
cout<<s<<endl;
}
return 0;
}
如果事情变得简单,那将是很好的,因为我只是C ++的初学者。
非常感谢:)
答案 0 :(得分:3)
由于您要计算Pi
最多任意 n
个数字,您需要一个库来处理大浮点数;见
C++ library for big float numbers
真正的麻烦是 Leibniz公式在上下文中无效。达到的实际精度可以估算为公式
中的最后一项 Pi / 4 = 1/1 - 1/3 + 1/5 - 1/7 + ... + (-1)**(n + 1) * 1 / (2 * n - 1) + ...
如果,对于intance,您希望Pi
达到100
位数,则表示剩余(和最后一项)应小于1e-100
:
1 / (2 * n - 1) < 1e-100
2 * n - 1 > 1e100
n > 5e99
正如您所看到的5e99
循环远远太多现代(超级)计算机