【基础算法】圆周率的多种方法求算 C++实现
创始人
2024-03-19 09:01:02
0


●割圆法

        一个圆如下面左图所示,其半径为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
#include
#include
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
#include
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
#include
#include
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的值:" <> g.x;g.Gregory1();g.showresult();
}
int main()
{text();
}


●蒙特卡洛

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


 

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...