c++ - 实现 Bailey-Borwein-Plouffe

标签 c++ math pi

学校的一位老师决定给我一个挑战,让我找出 Pi 的第 161、271、314 位数字。在网上搜索了很多之后,我最终认为 Bailey-Borwein-Plouffe 算法应该是最适合这种情况的算法。我设法理解了这个表达,但我仍然对我到底应该如何实现它感到困惑。我应该只对 k = 0 执行此操作到我需要的任何数字并添加结果吗?我认为这是我应该做的,但是在尝试了一些实现之后,我总是得到 4...出了点问题...有人可以解释一下如何实现吗?

我的代码:

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    int n;
    cin >> n;
    double pi = 0.0;

    for(int k = n; true; ++k)
    {
        pi += (4 / (8 * k + 1) - 2 / (8 * k + 4) - 1 / (8 * k + 5) - 1 / (8 * k + 6)) / pow(16, k);
        cout << pi << endl;
    }

    cout << pi << endl;

    return 0;
}

最佳答案

几个问题。首先,如果您需要将 pi 计算为多位数字,则必须想出一种结构来保存数字 - double 是不够的。

其次,整数除法截断为下面的整数,这不是数学公式中的意图。

关于c++ - 实现 Bailey-Borwein-Plouffe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29015860/

相关文章:

c - C 中的矩阵乘法

mysql - 如何计算每个订单订购的平均服务以及用户的唯一引用? (MySQL)

c++ - 顺时针旋转二维矩阵会产生奇数结果

python - Python 中的 Chudnovsky 公式

c# - 需要一种数据类型来在 C# 中保存 100 万以上的数字

c++ - C/C++ 中的 long long

c++ - 将罗马数字转换为 Int - 得到错误的输出 - 为什么?

c++ - 我的播放器类中的 getter 和 setter 问题

python - 为什么使用 Machin 公式计算 pi 的值会给出错误的值?

c++ - 使用 -O3 优化和奇数间距填充 16bpp 图像时崩溃