*程序說明與註釋
#include<stdio.h>
#include<math.h>
int 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);
}
*問題分析與算法設計
利用“正多邊形逼近”的方法求出π值在很早以前就存在,我們的先人祖沖之就是用這種方法在世界上第壹個得到精確度達小數點後第6位的π值的。
利用圓內接正六邊形邊長等於半徑的特點將邊數翻番,作出正十二邊形,求出邊長,重復這壹過程,就可獲得所需精度的π的近似值。
假設單位圓內接多邊形的邊長為2b,邊數為i,則邊數加倍後新的正多邊形的邊長為:
x=√——————
2-2*√———
1-b*b
——————
2
周長為:
y=2 * i * x i:為加倍前的正多邊形的邊數