注册 登录
编程论坛 C++教室

级数逼近问题,不能理解,大侠帮帮忙.........

a632034079 发布于 2009-12-01 15:03, 821 次点击
大侠帮帮忙,帮我解释下这个程序啊,书上一个注释都没有。看不懂啊...........
比如for(int n=1; abs(item)>1e-6; ++n)里的abs(item)>1e-6;是什么意思啊???
还有这句setiosflags(ios::fixed).....
为什么最后输出的结果和书上的不同啊!我看好几遍,没发现那里不同啊。
书上结果是Pi=3.141595 我的是Pi=2.666667,第二次Pi=4...
望大家能帮小弟解答疑惑,先谢过了最好能整个程序解释下。

#include <iostream.h>
#include <math.h>
#include <iomanip.h>
int main()
{
    int sum=0,item=1;
    for(int n=1; abs(item)>1e-6; ++n)
    {
        item*=(-1.0)*(2*n-3)/(2*n-1);
        sum+=item;
    }
    cout<<"Pi = "<<setiosflags(ios::fixed)<<sum*4<<endl;
    cin.get();
    return 0;
}
6 回复
#2
hoho5682009-12-01 17:46
比如for(int n=1; abs(item)>1e-6; ++n)里的abs(item)>1e-6;是什么意思啊???
就是item这个数的绝对值大于10的负6次方的意思。。

小于等于的时候终止。。

[ 本帖最后由 hoho568 于 2009-12-2 10:29 编辑 ]
#3
forclwy2009-12-01 20:21
iso::fixed 是操作符setiosflags 的参数之一,该参数指定的动作是以带小数点的形式表示浮点


#4
a6320340792009-12-01 20:47
能帮忙解释下整个程序吗
#5
hoho5682009-12-01 21:34
我怀疑你把求Pi的公式写错了。能把公式写一下吗,我记不清楚了。。
#6
ivanjoysky2009-12-01 23:21
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
int main()
{
    int sum=0,item=1;                  //这里最好定义成两个浮点数,float sum=0.0,item=1.0
    for(int n=1; abs(item)>1e-6; ++n)  //10^(-6) 也就是0.000001 计算机中的浮点数没法和0比较,
                                       //有个函数 fabs(item) >1e-6
                                       //如果用数学描述的话应该是和 item!=0.0 等价的
                                //而整数的绝对值才是abs,浮点数是fabs 所以这里应该是浮点数的绝对值,用fabs
                                       
    {
        item*=(-1.0)*(2*n-3)/(2*n-1);   //公式没错是:π=(1-1/3+1/5-1/7+…1/4n-3-1/4n-1)*4
        sum+=item;
    }
    cout<<"Pi = "<<setiosflags(ios::fixed)<<sum*4<<endl;//iso::fixed 是操作符setiosflags 的参数,是以带小数点的形式表示浮点数,这个你不用管,不用理解太深
               
    cin.get();//这个就不用解释了吧。。。
    return 0;
}

下面是正确的版本,我已测试:
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
int main()
{
    float sum=0;
    float item=1;
    for(int n=1; fabs(item)>1e-6; ++n)  
    {
        item*=(-1.0)*(2*n-3)/(2*n-1);
        sum+=item;
    }
    cout<<"Pi = "<<setiosflags(ios::fixed)<<sum*4<<endl;
    cin.get();
    return 0;
}

望及时结贴!!谢谢
#7
a6320340792009-12-02 14:38
以下是引用ivanjoysky在2009-12-1 23:21:16的发言:

#include <iostream.h>
#include <math.h>
#include <iomanip.h>
int main()
{
    int sum=0,item=1;                  //这里最好定义成两个浮点数,float sum=0.0,item=1.0
    for(int n=1; abs(item)>1e ...
非常感谢........
1