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

news2024/11/18 11:47:55


●割圆法

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

分析:(上面右图所示)

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

 其中边长为n,y1,1的三条边构成一个较大的三角形,根据勾股定理可得:

结合条件图中已知条件(m+n=1)和几何关系对公式继续进行化简推导:

所以圆周率π的近似值为:

如果内接24边形,其边长为y3,则其圆周率为: 

 如果内接48边形,其边长为y4,则其圆周率为:

 …… 

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

#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();
}


●级数公式法

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

#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();
}


●格雷戈里公式法

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

#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();
}


●蒙特卡洛

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


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/63172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于腾讯股票api股票接口的功能分析

因为国内外股价的上涨都可以在界面上去查询&#xff0c;所以公司能准确地判断股价上涨&#xff0c;并适时买入、卖出&#xff0c;以此获得一定的利润。 腾讯股票api股票接口还可以把以往的数据表示成一条折线&#xff0c;让公司在进行分析时更形象、更有参考意义。在连接界面后…

【数据结构与算法】线性表的查找

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;数据结构与算法 &#x1f320; 首发时间&#xff1a;2022年12月5日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e;…

Java入门教程(5)——开发第一个Java程序

文章目录1.1. 新建一个记事本&#xff0c;将后缀名改为java 如图示&#xff1a; 2.双击&#xff0c;选择打开方式为记事本 输入代码&#xff1a; public class HelloWorld{public static void main(String[] args){System.out.println("Hello world&#xff01;");…

基于DIPUM工具箱对图书数字图像进行处理(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 数字图像处理(Digital Image Processing)将图像信号转换成数字信号并利用计算机对其进行处理,起源于20世纪20年代,目前已广泛地…

电脑硬盘就一个c盘怎么分区,新电脑买回来只有一个c盘怎么分区

电脑硬盘就一个c盘怎么分区&#xff1f;为了方便存储数据&#xff0c;需要对磁盘分区那么&#xff0c;在本文中&#xff0c;易我小编将讲解电脑磁盘分区的实操方法。 一、Diskpart对C盘分区 在Windows操作系统中&#xff0c;Diskpart是命令提示符&#xff0c;可以实现创建分区…

安全面试之基础总结篇【超详细!】

前言 作者简介&#xff1a;不知名白帽&#xff0c;网络安全学习者。 博客主页&#xff1a;不知名白帽的博客_CSDN博客-网络安全,CTF,内网渗透领域博主 安全面试专栏&#xff1a;https://blog.csdn.net/m0_63127854/category_11869916.html 网络安全交流社区&#xff1a;https:…

华为网络模拟器ENSP安装(附安装包)

一、安装前注意事项 1、安装路径 以下所有软件,安装时不建议修改默认路径,尤其ENSP绝对不能安装在电脑主机的中文路径下,否则没法启动。 2、先安装依赖软件 VirtualBox不能安装目录不能有中文,只能装5.0至5.2版本。 WireShark为驱动级软件,需要重启生效,可以在三个软…

WebDAV之葫芦儿·派盘+恒星播放器

恒星播放器 支持WebDAV方式连接葫芦儿派盘。 想要拥有一款万能视频播放器,全能解码播放器,无需转码,支持所有格式的视频和音频,直接播放的播放器?那就选恒星播放器。 恒星播放器支持视屏投屏,倍速播放,后台播放等功能,还能一键截图和录制gif动图。支持全格式超高清真…

企业架构MySQL数据库架构读写分离

学习目标与内容 运维解决方案 读写分离常见的实现方式 MySQL读写分离案列实现 主从复制master配置 主从复制slave配置 简单业务代码实现 用以下代码通过停启主从服务器来检查主从复制原理~ <?php //创建类 class Mysql {//构造方法//当类被实例化时,会触发此方法public fu…

[附源码]Python计算机毕业设计Django居家养老服务系统小程序

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

[附源码]计算机毕业设计JAVA疫情居家隔离服务系统

[附源码]计算机毕业设计JAVA疫情居家隔离服务系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

【webrtc】PacketBuffer的VCMPacket管理

代码应该是m79.PacketBuffer 只是作为RtpVideoStreamReceiver 的一个成员变量出现,看起来并不重要,但是对于rtp包来说,非常重要:video_coding::PacketBuffer packet_buffer_;PacketBuffer::InsertPacket(VCMPacket* packet) 输入和输出 输入的是VCMpacket的指针 ,InsertPa…

线程池详解

一、概念 1、线程池管理器&#xff1a;用于创建并管理线程池&#xff0c;包括创建线程池&#xff0c;销毁线程池&#xff0c;添加新任务&#xff1b; 2、工作线程&#xff1a;线程池中线程&#xff0c;可以循环的执行任务&#xff0c;在没有任务时处于等待状态&#xff1b; …

Python 采集87个手绘风格PPT模板

源码下载链接&#xff1a;ppt.rar - 蓝奏云 PPT下载链接&#xff1a;https://pan.baidu.com/s/1HUAEe_-4IEV6ttOKC_VPuA?pwd96px 提取码&#xff1a;96px 采集的参数 page_count 1 # 每个栏目开始业务content"text/html; charsetgb2312"base_url "https:…

网络层之IP协议(必备知识)

文章目录1、IP协议头格式2、IP分片与组装4、IP基础知识<1>IP地址属于网络层地址<4>IP地址<2>路由控制<3>IP属于面型无连接型4、其他重要协议或技术<1>ICMP协议TCP/IP的心脏是互联网。这一层主要由IP(Internet Protocal) 和ICMP(Internet Control…

短视频内容创作:内容发给谁?为什么发?发什么?以什么形式发?

一句话介绍短视频内容定位&#xff0c;我赢助手每周一课短视频运营关键节点介绍。 内容定位无非就是视频发给谁?为什么发?以什么形式发&#xff1f; 短视频发给谁&#xff1f;就是做好你的目标受众的细分。 商业定位我们之前聊过了&#xff0c;如果你看过之前的内容&#x…

双十二护眼灯牌子买什么的好?几款比较好的学生护眼灯推荐

双十二即将来临&#xff0c;相信很多小伙伴们也开始着手选择比较喜欢的东西了吧&#xff0c;那对于学生来讲&#xff0c;护眼台灯也是一个不可忽视的好东西。 现在的学习压力这么大&#xff0c;用眼过于频繁&#xff0c;所以很多学生孩子眼睛就很容易近视&#xff0c;小小年纪就…

MATLAB实现希尔伯特变换以及FFT补零分析

南京信息工程大学 实验&#xff08;实习&#xff09;报告 实验&#xff08;实习&#xff09;名称 数字信号处理 实验&#xff08;实习&#xff09;日期 得分 指导老师 学院 电信院 专业 电子信息工程 年级 2020 班次 …

从vue2到vue3,生命周期函数有何变化之详解

vue2与vue3生命周期的对比&#xff1a; Vue2--------------Vue3 beforeCreate—————–>setup() created————————>setup() beforeMount—————–>onBeforeMount mounted—————-------> onMounted beforeUpdate -————–> onBeforeUpdate u…

正则表达式入门级别详细教程

文章目录常用正则表表达式01、火车车次02、手机机身码(IMEI)03、必须带端口号的网址(或ip)04、网址(URL)05、统一社会信用代码06、迅雷/ed2k/磁力链接07、子网掩码(不包含 0.0.0.0)08、Linux/windows文件路径09、股票代码(A股)10、大于等于0, 小于等于150, 支持小数位出现5, 如…