C语言中0和1e-6的区别是什么,为什么有时候可以替换有时候却不可以?

适用条件是什么?
**************************************************************8
#include<stdio.h>
#include<math.h>
void main()
{
int s;
double n,t,pi;
t=1;pi=0;n=1.0;s=1;
while(fabs(t)>1e-6)//换为0就错!!!
{
pi=pi+t;
n=n+2.0;
s=-s;
t=s/n;
}
pi=4*pi;
printf("pi=%.6lf\n",pi);

}
*************************************************************
#include<stdio.h>
#include<math.h>
void main()
{
float x0,x1,x2,f0,f1,f2;
do
{ scanf("%f %f",&x1,&x2);
f1=x1*((2*x1-4)*x1+3)-6;
f2=x2*((2*x2-4)*x2+3)-6;
}while(f1*f2>0);
do
{
x0=(x1+x2)/2;
f0=x0*((2*x0-4)*x0+3)-6;
if(f0*f1<0)//换为1e-5就错!!!
{
x2=x0;
f2=f0;
}

else
{
x1=x0;
f1=f0;
}
}while(fabs(f0)>1e-5);
printf("x=%.2f\n",x0);
}
*****************************************************************
为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?

区别很微小。这涉及到实数在计算和存储过程中会有一些微小的误差,对于一些与零作比较的语句来说,有时会因误差而导致原本是等于零但结果却小于零之类的情况发生,所以常用一个很小的数如1e-6代替0。解决办法是多调试。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-10-07
  C语言中0和1e-6的区别很微小。
  实数在计算和存储过程中会有一些微小的误差,对于一些与零作比较的语句来说,有时会因误差而导致原本是等于零但结果却小于零之类的情况发生,所以常用一个很小的数如1e-6代替0。
第2个回答  2010-05-09
这不是很简单吗 1e-6 不等于 0
不能用0的原因是 计算误差!
计算机里没有那么高的精确度
第3个回答  2010-05-09
1e-6其实就是0.000001,和0的区别很明显,你上面的程序中改为0会死循环的。