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倍。