大家看看我的这个C++程序有什么问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 01:53:04
#include<iostream.h>
#include<math.h>
void main()
{
float x,a,b,c,d,f,m,n;
cout<<"请顺序输入一元二次方程a*x^2+b*x+c=0的待定系数:";
cin>>a>>b>>c;
cout<<"请输入x的范围[m,n]:";
cin>>m>>n;
x=m;
for(x=m;x<=n;)
{
f=a*pow(x,2)+b*x+c;
if(fabs(f)<=0.0001)
cout<<"方程的解是:"<<x<<endl;
x+=0.01;
}
}
运行结果:
请顺序输入一元二次方程a*x^2+b*x+c=0的待定系数:1 -2 1
请输入x的范围[m,n]:-10 10
方程的解是:0.990133
方程的解释:1.00013

大家注意了,我给x的步长定的是:0.01,但是出来的结果却是到了小数点后面五位和六位,请大家告诉我这是为什么?

这就要从float存储形式说起;

简单的说,float存储区别整数存储,是一种尾数和指数的存储!!!

比如你
float p=0.01;//但有些编译器的有些时候会把p存粗空间写上0.01但不清空原有数据,所以,p=0.01+a(a<0.01......)

明白?这个你可以参考一些文献,只是简单的说还是难以表达的。

不懂~