C趣味程序百例(25)求π的近似值
78.求π的近似值
请用“正多边形近似”的方法求π的近似值
*问题分析及算法设计
求π值的“正多边形近似”的方法很久以前就有了,我们的祖先祖冲之就是用这种方法在世界上第一个得到了π的值,精度达到小数点后第6位。
利用正六边形内切圆的边长等于半径的特性,将边数加倍,做一个正十二边形,计算边长,重复此过程,得到π的近似值,达到要求的精度。
假设单位圆的内接多边形的边长为2b,边数为I,边数翻倍后的新正多边形的边长为:
周长:
y=2 * i * x i:加倍前正多边形的边数。
*程序和程序注释
# include
# include
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 e = b;/*保存当前正多边形的边长,作为下次精度控制的依据*/
}
printf(" pai = % . 15 lf \ n ",2 * I * b);/*输出π值和正多边形的边数*/
printf("所需多边形的边数:% LD \ n ",I);
}
*运行结果
PAI = 3.141592653589794
所需多边形的边数:100663296
*思考题
请用外切正多边形近似的方法求π的近似值。
0条评论