学校的一位老师决定给我一个挑战,让我找出 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/