2012-03-23 50 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