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

求圆周率中涉及科学计数的问题

bbxymc 发布于 2008-03-27 20:57, 943 次点击
求圆周率:
#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)就没有输出?
4 回复
#2
handongxue2008-03-28 00:28
一处小错误
float pi=0,n=1.0,t=1,int s;s=1;   //int前的逗号应改为分号。

其余地方没有问题,改为while(fabs(t)>1e-6)也可以输出的。
#3
bbxymc2008-03-28 13:47
谢谢楼上,还有个小问题
呵,谢谢!我没注意到分号的问题,用语句while(fabs(t)>1e-6)可以输出,但我想把小数精度设成8位,语句分别改成while(fabs(t)>1e-8)和cout<<"pi="<<setiosflags(ios::fixed)<<setprecision(8)<<pi<<endl;就没有输出结果了,是什么原因呢?
#4
acrobatyuer2008-03-29 08:25
LZ你应该了解一下浮点型常量在计算机中能有几个有效数字的问题了吧!
#5
bbxymc2008-03-29 16:19
关于浮点数在内存中的有效长度我注意了呀!可还是又问题?
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位,怎么就不正常输出了呢?
1