编辑:要求是模糊的,而不是计算 pi 的第 n 位数字,他们只是希望 pi 到第 n 位数字不超过浮点数限制,因此蛮力方式适用于要求。
我需要计算第 n 位的 PI,我想尝试使用BBP 公式,但遇到了困难。我输入的方程式似乎没有正确地给我 PI。
(1 / pow(16,n))((4 / (8 * n + 1)) - (2 / (8 * n + 4)) - (1 / (8 * n + 5)) - (1 / (8 * n + 6)))
我用蛮力找到 PI 的方法很成功,但这只是如此准确,而且很难找到第 n 个数字。
(4 - (4/3) + (4/5) - (4/7)...)
我想知道是否有人对如何做到这一点有更好的想法,或者可能帮助我的 BBP 方程解决我搞砸的问题?
谢谢你,
LF4
功能性但不是很准确,直到几次迭代,然后你不得不忽略最后几个。
#include <iostream>
using namespace std;
int main()
{
int loop_num = 0;
cout << "How many digits of pi do you want?: ";
cin >> loop_num;
double my_pi = 4.0;
bool add_check = false;
int den = 3;
for (int i = 0; i < loop_num; i++)
{
if (add_check)
{
my_pi += (4.0/den);
add_check = false;
den += 2;
}
else
{
my_pi -= (4.0/den);
add_check = true;
den += 2;
}
}
cout << "Calculated PI is: " << my_pi << endl;
system("pause");
return 0;
}
我希望会是一个更好的程序。
#include <iostream>
#include <cmath>
using namespace std;
const double PI_BASE = 16.0;
int main()
{
int loop_num = 0;
cout << "How many digits of pi do you want?: ";
cin >> loop_num;
double my_pi = 0.0;
for (int i = 0; i <= loop_num; i++)
{
my_pi += ( 1.0 / pow(PI_BASE,i) )( (4.0 / (8.0 * i + 1.0)) -
(2.0 / (8.0 * i + 4.0)) -
(1.0 / (8.0 * i + 5.0)) -
(1.0 / (8.0 * i + 6.0)) );
}
cout << "Calculated PI is: " << my_pi << endl;
system("pause");
return 0;
}