编程求pi的值
答案:2 悬赏:60 手机版
解决时间 2021-08-22 05:10
- 提问者网友:孤凫
- 2021-08-21 10:06
割圆法求pi值(正多边形逼近)的算法,C语言或M语言
最佳答案
- 五星知识达人网友:孤老序
- 2021-08-21 11:35
利用“正多边形逼近”的方法求出π值在很早以前就存在,我们的先人祖冲之就是用这种方法在世界上第一个得到精确度达小数点后第6位的π值的。
利用圆内接正六边形边长等于半径的特点将边数翻番,作出正十二边形,求出边长,重复这一过程,就可获得所需精度的π的近似值。
假设单位圆内接多边形的边长为2b,边数为i,则边数加倍后新的正多边形的边长为:
周长为:
y=2 * i * x i:为加倍前的正多边形的边数
*程序与程序注释
#include<stdio.h>
#include<math.h>
void main()
{
double e=0.1,b=0.5,c,d;
long int i; //i: 正多边形边数
for(i=6;;i*=2) //正多边形边数加倍
{
d=1.0-sqrt(1.0-b*b); //计算圆内接正多边形的边长
b=0.5*sqrt(b*b+d*d);
if(2*i*b-i*e<1e-15) break; //精度达1e-15则停止计算
e=b; //保存本次正多边形的边长作为下一次精度控制的依据
}
printf("pai=%.15lf\n",2*i*b); //输出π值和正多边形的边数
printf("The number of edges of required polygon:%ld\n",i);
}
*运行结果
pi=3.141592653589794
The number of edges of required polygon:100663296
来源:考试大-计算机二级考试
利用圆内接正六边形边长等于半径的特点将边数翻番,作出正十二边形,求出边长,重复这一过程,就可获得所需精度的π的近似值。
假设单位圆内接多边形的边长为2b,边数为i,则边数加倍后新的正多边形的边长为:
周长为:
y=2 * i * x i:为加倍前的正多边形的边数
*程序与程序注释
#include<stdio.h>
#include<math.h>
void main()
{
double e=0.1,b=0.5,c,d;
long int i; //i: 正多边形边数
for(i=6;;i*=2) //正多边形边数加倍
{
d=1.0-sqrt(1.0-b*b); //计算圆内接正多边形的边长
b=0.5*sqrt(b*b+d*d);
if(2*i*b-i*e<1e-15) break; //精度达1e-15则停止计算
e=b; //保存本次正多边形的边长作为下一次精度控制的依据
}
printf("pai=%.15lf\n",2*i*b); //输出π值和正多边形的边数
printf("The number of edges of required polygon:%ld\n",i);
}
*运行结果
pi=3.141592653589794
The number of edges of required polygon:100663296
来源:考试大-计算机二级考试
全部回答
- 1楼网友:神鬼未生
- 2021-08-21 13:08
http://www.cnblogs.com/cymheart/archive/2005/08/20/219208.html
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯