C趣味程序百例(25)求π的近似值

字號(hào):

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)用外切正多邊形逼近的方法求π的近似值。