【问题标题】:Calculation of value of Pi up to 'n' decimal places [closed]计算 Pi 的值直到小数点后'n'[关闭]
【发布时间】:2018-02-05 10:52:24
【问题描述】:

我试图制作一个 C++ 程序来使用 Leibniz formula. 计算 Pi 的值,直到小数点后 'n' 位

数字“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++ 的初学者,如果事情能保持简单就好了。

非常感谢:)

【问题讨论】:

  • “我遇到了麻烦” 不是问题描述。这个问题非常模糊和不完整。请阅读帮助中心以了解您缺少什么 - 主要是您目前编写的代码和一个具体问题。
  • 要么我遗漏了一些东西,要么数字的变化与 pi 的超越无关。您可以为 1.0 编写一个(较差的)迭代估计,但数字仍然会永远变化
  • 请公开示例代码。您是否知道数值浮点问题,例如SO: Floating point inaccuracy examples?
  • 谷歌肯定是一个更好的地方吗?自 1950 年代以来一直在研究这个问题。

标签: c++ algorithm math pi


【解决方案1】:

由于您想计算Pi 直到任意 nth 位,您需要一个处理大浮点数的库;见

C++ library for big float numbers

真正的麻烦在于,莱布尼茨公式在上下文中没用。实际达到的精度可以估计为公式中的最后一项

  Pi / 4 = 1/1 - 1/3 + 1/5 - 1/7 + ... + (-1)**(n + 1) * 1 / (2 * n - 1) + ... 

例如,如果您希望Pi 最多达到100th 位,则意味着残差(和最后一项)应小于1e-100

 1 / (2 * n - 1) < 1e-100
 2 * n  - 1 > 1e100
 n > 5e99

正如你所见5e99 循环对于现代(超级)计算机来说远远太多

【讨论】:

  • 还有一件事,先生,您提到要达到 100 位的准确度意味着最后一项必须小于 1e-100。但是,这些小项中的许多项是否有可能加起来会增加最后一个小数位?
  • @infinitely好奇:不,这是关于交替序列的已知结果(定理);所谓交替级数估计定理:残差小于上一项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2013-11-02
  • 2013-02-04
  • 1970-01-01
相关资源
最近更新 更多