”正多边形逼近“法求π:核心思想是极限的思想。假设一个直径d为1的圆,只要求出该圆的周长C,就可以通过π=C/d方法求出π的值。所以关键是求出该圆的周长C。
”正多边形逼近“也叫做”割圆术“,当一个圆的内接正多边形边数越多时,其边长就越接近外接的圆周长。
设一个直径为1的圆的内接多边形边长为b,边数为i,周长为C=bi;当多边形的边数加倍后,新多边形边长为x=sqrt(2-2sqrt(1-b*b))/2,新多边形周长为:C=2ix。
#include <iostream> #include<cmath> using namespace std; double getPI(int n) {//n指的是要迭代的次数(迭代次数越多越精确) int div,i=4;//div记录迭代次数 double b=sqrt(2)/2.0; //直径为1的圆,内接正四边形的初始化,其边长为sqrt(2)/2,边数为4,即i double c=0.0; for(div=0;div<n;div++) { b=sqrt(2.0-2.0*sqrt(1.0-b*b))*0.5;//边数加倍后的边长 i=i*2; //边数加倍 } c=b*i; //计算多边形周长 return c; } int main() { int n; double PI; cin>>n; PI=getPI(n); cout<<PI; return 0; }
时间: 2024-09-29 22:50:16