| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1113 人关注过本帖
标题:各位高手能不能帮我看下为什么结果不是3.1415926???
只看楼主 加入收藏
韩雨航
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2012-1-12
结帖率:57.14%
收藏
 问题点数:0 回复次数:11 
各位高手能不能帮我看下为什么结果不是3.1415926???
#include<iostream>
#include<cmath>
using namespace std;
void main()
{
    double sum=0,item=1;
    for(int denom=1,sign=1;abs(item)>1e-6;denom+=2,sign*=(-1))
    {
        item=sign/(double)denom;                        
        sum+=item;
    }
    cout<<"PI="<<sum*4<<endl;
}
搜索更多相关主题的帖子: void abs include double 
2012-01-12 17:54
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
收藏
得分:0 
你最好把你用的方法的原理贴到这,好分析,我记不清了,虽然我学过这个法

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-01-16 14:53
韩雨航
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2012-1-12
收藏
得分:0 
回复 2楼 BianChengNan
嗯嗯···
原理是级数逼近,π/4≈1-1/3+1/5-1/7+`````
先设定一个初项,然后一边累计,一边根据前一项求下一项~~
2012-01-17 09:08
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
收藏
得分:0 
以下是引用韩雨航在2012-1-17 09:08:35的发言:

嗯嗯···
原理是级数逼近,π/4≈1-1/3+1/5-1/7+`````
先设定一个初项,然后一边累计,一边根据前一项求下一项~~
刚才自己运行了一下,并在网上查了一下。结论如下:
运算结果不够精确,也就是不是3.141592657....但也差不多。
cout输出的时候默认只输出了小数后面的5位,加上前面的整数部分3,一共是6位。
可以通过cout.precision(位数)调整要输出的位数,比如cout.precision(11),可以显示小数点后10位 还有整数部分的1位。



我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-01-19 20:03
韩雨航
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2012-1-12
收藏
得分:0 
不好意思,我的输出结果为什么是2.66667···
麻烦了~~
2012-01-20 20:36
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
收藏
得分:0 
以下是引用韩雨航在2012-1-20 20:36:33的发言:

不好意思,我的输出结果为什么是2.66667···
麻烦了~~
不是吧???我运行过了啊,结果基本上是pi的值

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-01-21 10:48
韩雨航
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2012-1-12
收藏
得分:0 
回复 6楼 BianChengNan
是vc++6.0????????
我是vc++6.0,我的软件出了问题??
2012-01-21 11:50
appleyuchi
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-1-17
收藏
得分:0 
#include<iomanip>
#include<iostream>
#include<cmath>
using namespace std;
void main()
{    double sum=0,item=1;
    for(int denom=1,sign=1;fabs(item)*10e8>1;denom+=2,sign*=(-1))
    {
        item=sign/(double)denom;   
sum+=item;


    }
cout<<"PI/4="<<setprecision(8)<<sum<<endl;
cout<<"PI="<<setprecision(8)<<sum*4.0<<endl;
}
这样就可以了,是QQ175273546的人说的
2012-01-22 19:26
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
收藏
得分:0 
有意思,回去确认一下再

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-01-29 09:15
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
收藏
得分:0 
以下是引用韩雨航在2012-1-21 11:50:06的发言:

是vc++6.0????????
我是vc++6.0,我的软件出了问题??
抱歉,回去又确认了一下,确实是2.67777777,原因如下,当item为-0.33333的时候 abs(item) = 0, 0<1e-6,故循环不成立,提前退出了循环。
原因是abs是对整数进行取绝对值操作,首先把double型的值转换成整形,然后再取绝对值,用fabs函数应该就没问题了,因为fabs是对double型进行取绝对值的操作的函数。
我想这是原因所在了

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-01-30 14:30
快速回复:各位高手能不能帮我看下为什么结果不是3.1415926???
数据加载中...
 
   



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

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