78.求π的近似值
請(qǐng)利用“正多邊形逼近”的方法求出π的近似值
*問(wèn)題分析與算法設(shè)計(jì)
利用“正多邊形逼近”的方法求出π值在很早以前就存在,我們的先人祖沖之就是用這種方法在世界上第一個(gè)得到精確度達(dá)小數(shù)點(diǎn)后第6位的π值的。
利用圓內(nèi)接正六邊形邊長(zhǎng)等于半徑的特點(diǎn)將邊數(shù)翻番,作出正十二邊形,求出邊長(zhǎng),重復(fù)這一過(guò)程,就可獲得所需精度的π的近似值。
假設(shè)單位圓內(nèi)接多邊形的邊長(zhǎng)為2b,邊數(shù)為i,則邊數(shù)加倍后新的正多邊形的邊長(zhǎng)為:
周長(zhǎng)為:
y=2 * i * x i:為加倍前的正多邊形的邊數(shù)
*程序與程序注釋
#include
#include
void main()
{
double e=0.1,b=0.5,c,d;
long int i; /*i: 正多邊形邊數(shù)*/
for(i=6;;i*=2) /*正多邊形邊數(shù)加倍*/
{
d=1.0-sqrt(1.0-b*b); /*計(jì)算圓內(nèi)接正多邊形的邊長(zhǎng)*/
b=0.5*sqrt(b*b+d*d);
if(2*i*b-i*e<1e-15) break; /*精度達(dá)1e-15則停止計(jì)算*/
e=b; /*保存本次正多邊形的邊長(zhǎng)作為下一次精度控制的依據(jù)*/
}
printf("pai=%.15lf\n",2*i*b); /*輸出π值和正多邊形的邊數(shù)*/
printf("The number of edges of required polygon:%ld\n",i);
}
*運(yùn)行結(jié)果
pai=3.141592653589794
The number of edges of required polygon:100663296
*思考題
請(qǐng)用外切正多邊形逼近的方法求π的近似值。
請(qǐng)利用“正多邊形逼近”的方法求出π的近似值
*問(wèn)題分析與算法設(shè)計(jì)
利用“正多邊形逼近”的方法求出π值在很早以前就存在,我們的先人祖沖之就是用這種方法在世界上第一個(gè)得到精確度達(dá)小數(shù)點(diǎn)后第6位的π值的。
利用圓內(nèi)接正六邊形邊長(zhǎng)等于半徑的特點(diǎn)將邊數(shù)翻番,作出正十二邊形,求出邊長(zhǎng),重復(fù)這一過(guò)程,就可獲得所需精度的π的近似值。
假設(shè)單位圓內(nèi)接多邊形的邊長(zhǎng)為2b,邊數(shù)為i,則邊數(shù)加倍后新的正多邊形的邊長(zhǎng)為:
周長(zhǎng)為:
y=2 * i * x i:為加倍前的正多邊形的邊數(shù)
*程序與程序注釋
#include
#include
void main()
{
double e=0.1,b=0.5,c,d;
long int i; /*i: 正多邊形邊數(shù)*/
for(i=6;;i*=2) /*正多邊形邊數(shù)加倍*/
{
d=1.0-sqrt(1.0-b*b); /*計(jì)算圓內(nèi)接正多邊形的邊長(zhǎng)*/
b=0.5*sqrt(b*b+d*d);
if(2*i*b-i*e<1e-15) break; /*精度達(dá)1e-15則停止計(jì)算*/
e=b; /*保存本次正多邊形的邊長(zhǎng)作為下一次精度控制的依據(jù)*/
}
printf("pai=%.15lf\n",2*i*b); /*輸出π值和正多邊形的邊數(shù)*/
printf("The number of edges of required polygon:%ld\n",i);
}
*運(yùn)行結(jié)果
pai=3.141592653589794
The number of edges of required polygon:100663296
*思考題
請(qǐng)用外切正多邊形逼近的方法求π的近似值。