相关文章推荐
踏实的毛衣  ·  杭州第十四中学青山湖学校·  1 年前    · 
神勇威武的楼梯  ·  Amazon CloudFront ...·  1 年前    · 
快乐的凉面  ·  驻爱丁堡总领事谭秀甜举行国庆61周年主流界招 ...·  1 年前    · 
坐怀不乱的山羊  ·  'item' not defined?? ...·  2 年前    · 
耍酷的四季豆  ·  巴赫曼:沙漠之旅 电影剧情·  3 年前    · 
Code  ›  C++ π 的计算开发者社区
c++ int函数
https://cloud.tencent.com/developer/article/1602886
难过的水煮鱼
2 年前
用户6021899

C++ π 的计算

腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
用户6021899
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > C++ π 的计算

C++ π 的计算

作者头像
用户6021899
发布 于 2020-03-23 16:30:05
3.1K 0
发布 于 2020-03-23 16:30:05
举报
文章被收录于专栏: Python编程 pyqt matplotlib Python编程 pyqt matplotlib

今天是3.14,我们用C++ 以各种方法试着来计算一下π的值。

割圆术:

迭代公式为:

long double circle_cutting(int n)
    long double a = 1.0;
    for(int i=0; i< n ; i++)
        a = sqrt(2.0L-sqrt(4.0L-a*a));
    return 3*pow(2,n)*a;
}

沃利斯乘积公式:

long double Wallis(long int n)
    //收敛的非常慢!
    long double s =1.0L;
    long double a;
    for (int i = 1 ;i <= n; i++)
        a = 4.0L*i*i/(2*i-1.0)/(2*i+1.0);
        s *= a;
        //cout<<s<<endl;
    return 2*s;
}

格雷果里-莱布尼茨公式:

x =1 时,结果即为 π/4。

long double Leibniz(long int n)
    //格雷果里-莱布尼茨公式法
    //收敛的非常慢!
    long double s =1.0L;
    long double a;
    for (int i = 1 ;i <= n; i++)
        a = 1.0L/(2*i+1.0);
        if(i%2)
            a = 0-a;
        s += a;
    return 4*s;
}

积分法:

long double integral(long int n)
    //1/4圆 积分。圆心在(0,0),半径为1
    long double s = 0.0;
    long double a,x;
    for (int i = 1 ;i <= n; i++)
        x = 1.0L * i / n;
        a = 1.0L / n * sqrt(1 - x*x);
        s += a;
        //cout<<s<<endl;
    return 4*s;
}

概率法:

x 在0~1, 且y在0~1的矩形内随机丢点,点落在中心为(0.5,0.5),半径为0.5的圆内的概率是pi/4。

long double random_drop(long int n)
    long double x, y, a ,b;
    long int s = 0;
    for (int i=0; i < n; i++)
        x = rand()/(double)RAND_MAX;
        y = rand()/(double)RAND_MAX;
        a = x-0.5;
        b = y-0.5;
        if (a*a + b*b <= 0.25)
            s += 1;
    return 4.0L * s / n;

main函数部分:

#include <iostream>
#include <cmath>
#include<iomanip>
using namespace std;
long double circle_cutting(int);
long double Wallis(long int);
long double Leibniz(long int);
long double integral(long int);
long double random_drop(long int);
int main()
    cout <<setprecision(12)<<circle_cutting(17)<<endl;//第17次迭代到相对最优
 
推荐文章
踏实的毛衣  ·  杭州第十四中学青山湖学校
1 年前
神勇威武的楼梯  ·  Amazon CloudFront 部署小指南(十四)- 利用 Amazon CloudFront 实现 gRPC 协议加速 | 亚马逊AWS官方博客
1 年前
快乐的凉面  ·  驻爱丁堡总领事谭秀甜举行国庆61周年主流界招待会_中华人民共和国驻爱丁堡总领事馆
1 年前
坐怀不乱的山羊  ·  'item' not defined?? | Codecademy
2 年前
耍酷的四季豆  ·  巴赫曼:沙漠之旅 电影剧情
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号