标题:级数逼近问题,不能理解,大侠帮帮忙.........
只看楼主
a632034079
Rank: 2
等 级:论坛游民
帖 子:115
专家分:34
注 册:2009-10-3
结帖率:86.11%
已结贴  问题点数:50 回复次数:6 
级数逼近问题,不能理解,大侠帮帮忙.........
大侠帮帮忙,帮我解释下这个程序啊,书上一个注释都没有。看不懂啊...........
比如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;
}
搜索更多相关主题的帖子: 级数 
2009-12-01 15:03
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
得分:5 
比如for(int n=1; abs(item)>1e-6; ++n)里的abs(item)>1e-6;是什么意思啊???
就是item这个数的绝对值大于10的负6次方的意思。。

小于等于的时候终止。。

[ 本帖最后由 hoho568 于 2009-12-2 10:29 编辑 ]
2009-12-01 17:46
forclwy
Rank: 4
等 级:业余侠客
帖 子:167
专家分:255
注 册:2008-10-21
得分:5 
iso::fixed 是操作符setiosflags 的参数之一,该参数指定的动作是以带小数点的形式表示浮点


2009-12-01 20:21
a632034079
Rank: 2
等 级:论坛游民
帖 子:115
专家分:34
注 册:2009-10-3
得分:0 
能帮忙解释下整个程序吗
2009-12-01 20:47
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
得分:0 
我怀疑你把求Pi的公式写错了。能把公式写一下吗,我记不清楚了。。
2009-12-01 21:34
ivanjoysky
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:22
专家分:137
注 册:2009-11-22
得分:40 
#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;
}

望及时结贴!!谢谢
2009-12-01 23:21
a632034079
Rank: 2
等 级:论坛游民
帖 子:115
专家分:34
注 册:2009-10-3
得分:0 
以下是引用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 ...
非常感谢........
2009-12-02 14:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-293574-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.645963 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved