学校的老师决定给我一个挑战,找到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;
}
答案 0 :(得分:2)
有几个问题。首先,如果你需要计算pi到多个数字,你必须想出一个用于保持数字的结构 - double
是不够的。
其次,整数除法截断为下面的整数,这不是数学公式中的意图。