【基础算法】圆周率的多种方法求算 & C++实现

这篇具有很好参考价值的文章主要介绍了【基础算法】圆周率的多种方法求算 & C++实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【基础算法】圆周率的多种方法求算 & C++实现


●割圆法

        一个圆如下面左图所示,其半径为1,其内部内接一个正六边形。设正六边形的边长为y1。由几何知识可得知y1=1,所以圆的周长可近似为正六边形的周长C=6×y1=6.所以圆周率为前面的近似圆周长与圆直径之比,即C/2= 3≈π,这就是按照割圆法来得到圆周率近似值的方法。

【基础算法】圆周率的多种方法求算 & C++实现

分析:(上面右图所示)

其中边长为m、y1、y2的三条边构成一个小直角三角形,根据勾股定理可得:

【基础算法】圆周率的多种方法求算 & C++实现 其中边长为n,y1,1的三条边构成一个较大的三角形,根据勾股定理可得:

【基础算法】圆周率的多种方法求算 & C++实现结合条件图中已知条件(m+n=1)和几何关系对公式继续进行化简推导:

【基础算法】圆周率的多种方法求算 & C++实现所以圆周率π的近似值为:

【基础算法】圆周率的多种方法求算 & C++实现如果内接24边形,其边长为y3,则其圆周率为: 

【基础算法】圆周率的多种方法求算 & C++实现 如果内接48边形,其边长为y4,则其圆周率为:

【基础算法】圆周率的多种方法求算 & C++实现 …… 

综上归纳可知,在割圆术这个算法中主要用到以下两个公式:

【基础算法】圆周率的多种方法求算 & C++实现

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
class cyclotomic {
public:
	void cyclotomic1()
	{
		int i = 1,a=1;
		double len = 1;
		while(i<=n)
		{ 
			len = 2 - sqrt(4 - len);   //内接多边形的边长
			a *= 2;
			i++;
		}
		pi = 3.0 * (double)a * sqrt(len);
	}
	void showresult()
	{
		cout.precision(12);   //小数点后第十二位
		cout << pi << endl;
	}
	int n;
	double pi;
};
void text()
{
	cyclotomic c;
	cout << "输入要切割的次数:" << endl;
	cin>>c.n;
	c.cyclotomic1();
	c.showresult();
}
int main()
{
	text();
}

【基础算法】圆周率的多种方法求算 & C++实现


●级数公式法

        在微积分中,对一个表达式进行级数展开并取极限便可以得到一系列的迭代计算公式。对于圆周率π也可以采用相同的方法来得到级数公式(泰勒展开式)。这样的级数公式很多,依赖于不同的级数展开表达式,下面就是一个典型的求圆周率级数公式的例子:

【基础算法】圆周率的多种方法求算 & C++实现

【基础算法】圆周率的多种方法求算 & C++实现

#include<iostream>
#include<iomanip>
using namespace std;
class series1 {
public:
	void series_1()
	{
		int i = 1;
		double sum=1,record=1, m=1, n=3,t;
		while (i <= x)
		{
			t = m / n;
			t = t * record;
			sum += t;
			m += 1;
			n += 2;
			record = t;
			i++;
		}
		pi = 2.0 * sum;
	}
	void showresult()
	{
		cout.precision(12);//小数点后第十二位
		cout << pi << endl;
	}
	int x;
	double pi;
};
void text()
{
	series1 s1;
	cout << "请输入该公式往后计算的位数:" << endl;
	cin >> s1.x;
	s1.series_1();
	s1.showresult();
}
int main()
{
	text();
}

【基础算法】圆周率的多种方法求算 & C++实现


●格雷戈里公式法

        格雷戈里公式的实质是反正切函数的泰勒展开式,属于级数公式的一种,具体公式如下:

【基础算法】圆周率的多种方法求算 & C++实现

【基础算法】圆周率的多种方法求算 & C++实现

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
class Gregory {
public:
	void Gregory1()
	{
		int sign = 1;
		double m = 1, term = 1;
		while (fabs(term) >= x)
		{
			pi += term;
			m += 2;
			sign = -sign;	
			term = sign / m;
		}
		pi = 4.0 * pi;
	}
	void showresult()
	{
		cout.precision(12);//小数点后第十二位
		cout << pi << endl;
	}
	double x;
	double pi=0;
};
void text()
{
	Gregory g;
	cout << "输入精度e的值:" <<endl;
	cin >> g.x;
	g.Gregory1();
	g.showresult();
}
int main()
{
	text();
}

【基础算法】圆周率的多种方法求算 & C++实现


●蒙特卡洛

        在概率算法的文章中,举的蒙特卡洛算法例子就是用概率的方法去寻找π,具体在http://t.csdn.cn/VifFM


 文章来源地址https://www.toymoban.com/news/detail-449716.html

到了这里,关于【基础算法】圆周率的多种方法求算 & C++实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python学习28:计算圆周率——蒙特卡洛法

    描述 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 蒙特卡洛(M

    2024年02月08日
    浏览(46)
  • 用python计算圆周率PI,并显示进度条

    ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬ 描述 用python计算圆周率PI ‪‬‪‬‪‬‪

    2024年02月05日
    浏览(40)
  • 学校头歌作业3_4计算圆周率(头歌作业[Python])

    在CSDN上补充前几期的内容 第1关:割圆法 第2关:无穷级数法 第3关:蒙特卡洛法 第4关:梅钦法 第5关:拉马努金法

    2024年02月10日
    浏览(42)
  • 蓝桥杯专题-真题版含答案-【大衍数列】【圆周率】【分糖果】【等额本金】

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 点击跳转=软考全系列 点击跳转=蓝桥系列 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、

    2024年02月13日
    浏览(49)
  • Unity零基础到进阶 | Unity中 屏蔽指定UI点击事件 的多种方法整理

    🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN 🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 🌲Unity实战100例专栏推荐:Unity 实战100例 教程 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长

    2024年03月09日
    浏览(56)
  • C++算法之旅、04 基础篇 | 第一章 基础算法

    cstdio 有两个函数 printf,scanf 用于输出和输入 iostream 有 cin 读入,cout 输出 使用了std命名空间,cin、cout定义在该命名空间中,不引入空间会找不到导致出错 函数执行入口 ⭐所有 cout、cin 都能用 scanf、printf 替换,但反过来,由于cout、cin效率可能较低会导致超时 ⭐ printf %c 会读

    2024年02月10日
    浏览(44)
  • 百题千解计划【CSDN每日一练】“小明投篮,罚球线投球可得一分”(附解析+多种实现方法:Python、Java、C、C++、C#、Go、JavaScript)

      这个心上人,还不知道在哪里,感觉明天就会出现。     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌟[2] 2022年度博客之星人工智能领域TOP4🌟   🏅[3] 阿里云社区特邀专家博主🏅   🏆[4] CSDN-人工智能领域优质创作者🏆

    2024年02月15日
    浏览(50)
  • 【C++算法竞赛 · 图论】图论基础

    前言 图论基础 图的相关概念 图的定义 图的分类 按数量分类: 按边的类型分类: 边权 简单图 度 路径 连通 无向图 有向图 图的存储 方法概述 代码 复杂度 图论(Graph theory) ,是 OI 中的一样很大的一个模块,围绕它有很多高难度的算法以及高级的概念。 这篇文章将介绍关

    2024年04月12日
    浏览(42)
  • C++基础算法高精度篇

    📟作者主页:慢热的陕西人 🌴专栏链接:C++算法 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 主要讲解了高精度算法的四种常用的计算 以下数字均指位数 ①A + B(精度均在10^6) ②A - B (精度均在10^6) ③A * b (len(A) = 10^6, a = 1000); ④A / b (len(A) = 10^6, a = 1000); Ⅲ. Ⅰ . A

    2024年02月16日
    浏览(35)
  • C++算法之旅、04 基础篇 | 第一章

    cstdio 有两个函数 printf,scanf 用于输出和输入 iostream 有 cin 读入,cout 输出 使用了std命名空间,cin、cout定义在该命名空间中,不引入空间会找不到导致出错 函数执行入口 ⭐所有 cout、cin 都能用 scanf、printf 替换,但反过来,由于cout、cin效率可能较低会导致超时 ⭐ printf %c 会读

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包