C++计算π值
问题
利用下面公式计算π值:
此公式错误!
公式参考链接:http://www.cppfans.com/articles/basecalc/c_pi_10000.asp
程序提示“accuracy:”,用户输入精确度(注意:输入时只可用指数形式,并且使用小写e),程序给出计算的结果pi(保留4位小数)与迭代次数count。
代码
#include <iomanip>
#include <vector>
#include <algorithm>
#include <iostream>
#define ISINT(A) (long double(int(A)) == A)
using namespace std;
long double fun_pi(long double n) {
long double d = 1.0;
while (n >= 1.0) {
d *= (n + 1.0) * (n + 1.0) / (n * (n + 2.0));
n -= 2;
}
return d;
//递归栈溢出
// if (n == 1.0)
// return (2.0 * 2.0) / (1.0 * 3.0);
// else
// return (n + 1.0) * (n + 1.0) / (n * (n + 2.0)) * fun_pi(n - 2.0);
}
long double fun_le(int accuracy) {
// long double d = 1.0;
// while (accuracy != 1) {
// accuracy--;
// d *= 0.1;
// }
// return d * 0.1;
if (accuracy == 1)
return 0.1;
else
return 0.1 * fun_le(accuracy - 1);
}
void fun(int accuracy) {
long double acc = fun_le(accuracy);
long double pre_pi, now_pi, next_pi;
long double max_, min_;
int count = 0;
for (int i = 1;; i += 2) {
count++;
now_pi = fun_pi(i) * 2;
next_pi = fun_pi(i + 2) * 2;
max_ = max(next_pi, now_pi);
min_ = min(next_pi, now_pi);
if (max_ - min_ < acc) {
cout << "pi=" << fixed << setprecision(4) << now_pi << "," << "count=" << count + 1 << endl;
break;
}
}
}
int main() {
int n = 1;
while (n != 0) {
n--;
cout << "accuracy:";
string str;
cin >> str;
int accuracy = atoi(str.erase(0, 3).c_str());
if (accuracy > 0) {
fun(accuracy);
} else {
cout << "Bye!" << endl;
break;
}
}
return 0;
}