2012-03-23 73 views
1

所以這裏是一個程序,應該計算pi的值的近似值,如果你在下面的程序中用數學方法描述的和值中計算足夠的項並計算根的表達式,則會得到一個值越接近越接近pi的價值越多。公式不正確?

#include <stdio.h> 
#include <math.h> 

main() 
{ 
    int j, terms; 
    double sum, precision, pi; 
    printf("How many terms: "); scanf("%d", &terms); 
    for(j=1;j<=terms;j++) 
     sum+=1/(j*j); 
    pi = sqrt(6*sum); 
    printf("Pi: %lf.\n", pi); 
} 

但有一點使它變爲錯在這裏,我不能完全弄清楚。

sum+=1/(j*j); 

我認爲錯誤可能是在該行,因爲所有的人看起來很好,起初也許電腦不算decimals.I'm unsure.But我的問題的想法是:這是什麼在此代碼這使它出現故障?我該如何解決它?

+0

以何種方式被它的問題呢? – Jesper 2012-03-23 08:34:43

+0

你也可以嘗試蒙特卡洛方法 - 你可能會得到額外的分數! – 2012-03-23 08:39:09

+0

無論您給出多少條款,它都保持相同的價值。 – user956281 2012-03-23 08:39:26

回答

7

此執行整數除法:

1/(j*j); 

試試這個:

sum+=1.0/(j*j); 

如果j*j可能溢出,這樣做

sum+=1.0/((double)j*j); 
+0

我認爲這解決了這個問題。謝謝! =) – user956281 2012-03-23 08:38:57