实施Bailey-Borwein-Plouffe

时间:2015-03-12 16:59:17

标签: 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;
}

1 个答案:

答案 0 :(得分:2)

有几个问题。首先,如果你需要计算pi到多个数字,你必须想出一个用于保持数字的结构 - double是不够的。

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