*程序描述和註釋
# include & ltstdio.h & gt
# include & ltmath.h & gt
int main()
{
雙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 & lt;1e-15)破位;/*精度達到1e-15時停止計算*/
e = b;/*保存該正多邊形的邊長,作為下壹次精度控制的基礎*/
}
printf("pai=%.15lf\n ",2 * I * b);/*輸出π值和正多邊形的邊數*/
printf("所需多邊形的邊數:%ld\n ",I);
}
*問題分析和算法設計
用“正多邊形逼近”的方法求π值很久以前就有了,我們的祖先祖沖之在世界上第壹個用這種方法得到了精度達到小數點後第六位的π值。
利用圓內接正六邊形的邊長等於半徑的特性,將邊數增加壹倍,做成正十二邊形,計算邊長,重復這個過程就可以得到所需精度的π的近似值。
假設單位圓內接多邊形的邊長為2b,邊數為I,邊數翻倍後的新正多邊形的邊長為:
x=√—————
2-2*√———
1-b*b
——————
2
周長是:
Y=2 * i * x i:是加倍前正多邊形的邊數。