编辑:需求不够明确,他们只需要π的第n位而不是计算π的第n位,因此暴力方法符合要求。
我需要计算π的第n位,并尝试使用BBP公式,但遇到了困难。我打出的等式似乎没有正确地给出π。
(1 / pow(16,n))((4 / (8 * n + 1)) - (2 / (8 * n + 4)) - (1 / (8 * n + 5)) - (1 / (8 * n + 6)))
我曾经用暴力方法成功地找到了π的值,但这种方法只有一定的精度,而且要找到第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;
}