【C++计算π值】

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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值