回 帖 发 新 帖 刷新版面

主题:这个小程序把我搞晕了。

用级数逼近法求PI的值,数学公式是4*PI=1-1/3+1/5-1/7。。。。。。。
下面是我的代码,可是怎么运行答案都是4。。。我就纳闷了,看了半天找不到错。
请大虾们看看帮帮忙,谢谢了!

#include<iostream>
#include<cmath>

using namespace std;
int main(){
    double a=1,sum=0;
    int i=1;
    for(int n=1;abs(a)>=1e-6;n++){
            a=i*(1/(2*n-1));
            i*=(-1);
            sum+=a;
            }
    cout<<4*sum<<endl;
    system("pause");
}

回复列表 (共6个回复)

沙发

a=i*(1/(2*n-1));
改成:
 a=i*(1/(2*n-1.0));
试试:)

板凳

[quote]a=i*(1/(2*n-1));
改成:
 a=i*(1/(2*n-1.0));
试试:)[/quote]

我擦,高手啊!能否再解释一下为什么会这样?

3 楼

i      int型
1      int型
2*n    int型
所以a=i*(1/(2*n-1));全部进行的是int型的运算,可想而知"/"运算后得到得到的是整数。
把1改成1.0变成float,则整个运算式都需要自动转换成float型,再进行"/"运算。

4 楼

正如3楼所述:
整型做四则运算时最终结果是整型的:)如果存在短整与长整的混合,则会统一变成长整后再计算,结果自然是长整。
同理,如果是整型与浮点混合,则会统一变成浮点后再进行运算(虽然并不一定都会转,但你可以这样认为)

5 楼

[quote][quote]a=i*(1/(2*n-1));
改成:
 a=i*(1/(2*n-1.0));
试试:)[/quote]

我擦,高手啊!能否再解释一下为什么会这样?[/quote]
我擦擦,计算机程序和数学之间的微妙差别

6 楼

学习了

我来回复

您尚未登录,请登录后再回复。点此登录或注册