| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 374 人关注过本帖
标题:求圆周率中涉及科学计数的问题
收藏  订阅  推荐  打印 
bbxymc
Rank: 1
等级:新手上路
帖子:8
积分:184
注册:2008-3-27
求圆周率中涉及科学计数的问题

求圆周率:
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
void main()
{ float pi=0,n=1.0,t=1,int s;s=1;
while(fabs(t)>0.000001)
{pi+=t;
n+=2;
s=-s;
t=s/n;
}
pi=4*pi;
cout<<"pi="<<setiosflags(ios::fixed)<<setprecision(6)<<pi<<endl;
}
while(fabs(t)>0.000001)为什么改用while(fabs(t)>1e-6)就没有输出?
搜索更多相关主题的帖子: 圆周率  科学  计数  
2008-3-27 20:57
handongxue
Rank: 1
等级:新手上路
帖子:25
积分:362
注册:2008-3-25
一处小错误

float pi=0,n=1.0,t=1,int s;s=1;   //int前的逗号应改为分号。

其余地方没有问题,改为while(fabs(t)>1e-6)也可以输出的。
2008-3-28 00:28
bbxymc
Rank: 1
等级:新手上路
帖子:8
积分:184
注册:2008-3-27
谢谢楼上,还有个小问题

呵,谢谢!我没注意到分号的问题,用语句while(fabs(t)>1e-6)可以输出,但我想把小数精度设成8位,语句分别改成while(fabs(t)>1e-8)和cout<<"pi="<<setiosflags(ios::fixed)<<setprecision(8)<<pi<<endl;就没有输出结果了,是什么原因呢?
2008-3-28 13:47
acrobatyuer
Rank: 1
等级:新手上路
帖子:13
积分:236
注册:2008-3-28

LZ你应该了解一下浮点型常量在计算机中能有几个有效数字的问题了吧!
2008-3-29 08:25
bbxymc
Rank: 1
等级:新手上路
帖子:8
积分:184
注册:2008-3-27
关于浮点数在内存中的有效长度我注意了呀!可还是又问题?

float的有效位是7位,double有效位是15位。在使用float时,语句float pi=0,n=1.0,t=1,int s=1;和while(fabs(t)>1e-6)和cout<<"pi="<<setiosflags(ios::fixed)<<setprecision(6)<<pi<<endl;实际输出有效位是8位,超出了float的有效位7位,也能正常输出;可在将float改位double时,相应语句也变成double pi=0,n=1.0,t=1,int s=1;和while(fabs(t)>1e-8)和cout<<"pi="<<setiosflags(ios::fixed)<<setprecision(8)<<pi<<endl;实际输出有效位是10位,没超出double的有效位15位,怎么就不正常输出了呢?
2008-3-29 16:19
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.050427 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved