问题:请用正多边形逼近法求Π的近似值。
算法:圆的周长 = 正多边形的边长 * 边数。设圆的半径为1,则2Π = i * x 。其中 i 为正多边形边数,x 为边长。
因为圆的半径 = 内接于此圆的正六边形的边长,故从六边形开始计算。参数 e 表示精度要求。b表示正多边形边数翻番之前边长的一半。
double Pi(double e){int i = 6;double b,x = 1; //正六边形边长为1do{b = x/2;i *= 2; //边数翻番x = sqrt(2-2*sqrt(1.0-b*b)); //计算翻番后的边长}while(i*x-i*b>e); //精度达到要求则停止计算cout<<"圆的内接多边形边数为:"<<i<<endl;return (i*x)/2; //返回Π的近似值
}
测试:
运行结果: