1. 程式人生 > >c語言:求π的近似值

c語言:求π的近似值

用公式π/4=1-1/3+1/5-1/7...求π的近似值,直到發現某一項的絕對值小於10^6為止(該項不累加)

解:程式:

#include<stdio.h>

#include<math.h>

int main()

{

int sign = 1;

double pi = 0.0, n = 1.0, term = 1.0;//term表示當前項

while (fabs(term) >= 1e-6)

{

pi += term;

n += 2;

sign = -sign;

term = sign / n;

}

pi *= 4;

printf("pi=%10.8f\n", pi);

return 0;

}

結果:

pi=3.14159065

請按任意鍵繼續. . .

本程式輸出的結果是pi=3.14159065,雖然輸出了8位小數,但是隻有前5位小數3,14159是準確的,因為第7位已經小於10^-6,後面的項沒有累加。

再看如下兩個精度不同的程式:

程式1:

#include<stdio.h>

#include<math.h>

int main()

{

int sign=1;

int count = 0;

double pi = 0.0, n = 1.0, term = 1.0;//term表示當前項

while(fabs(term)>=1e-6)

{

count++;

pi += term;

n += 2;

sign = -sign;

term = sign / n;

}

pi *= 4;

printf("pi=%10.8f\n",pi);

printf("count=%d\n",count);

return 0;

}

結果:

pi=3.14159065

count=500000

請按任意鍵繼續. . .

程式2:

#include<stdio.h>

#include<math.h>

int main()

{

int sign=1;

int count = 0;

double pi = 0.0, n = 1.0, term = 1.0;//term表示當前項

while(fabs(term)>=1e-8)//變化部分

{

count++;

pi += term;

n += 2;

sign = -sign;

term = sign / n;

}

pi *= 4;

printf("pi=%10.8f\n",pi);

printf("count=%d\n",count);

return 0;

}

結果:

pi=3.14159263

count=50000000

請按任意鍵繼續. . .

精度不同,執行時間不同,程式2精度更高,但是執行次數是程式1的100倍。