这两个变量,如何会不相等呢

这两个变量,怎么会不相等呢?
有两个float 型的变量mu , muprev
  printf("mu = %3.9f\n",mu);
  printf("muprev = %3.9f\n",muprev);
  if(mu == muprev) goto S10;

在程序里面输出的结果都是 0.000000000。
可是在下面的那个判断中却认为不相等,没有跳到S10。感觉太诡异了,请明白的朋友帮忙看看,谢谢!



------解决方案--------------------
浮点数判断相等要用一个范围判断 如|a-b|<0.00001
------解决方案--------------------
浮点数精度问题,float类型只能精确到小数点后六位
------解决方案--------------------
浮点数类型的缺陷
虽然printf输出的是一样

但是这2个数可能就是不同的!
0.9999999999999可能为1
1.0000000000001也可能为1
------解决方案--------------------
float型的变量不能这么比较。
举例来说,你把mu和0进行比较的话,是永远不会相等的,只能做下面的判断:
if (mu < FLOAT_MIN && mu > -FLOAT_MIN ) {
...
}

其中,FLOAT_MIN 是误差值,可以是0.000000001之类的小数。
类似的,你要比较2个float数,做差之后,用我上边给出的方法判断吧。
------解决方案--------------------
对这属于机器精度转换问题.
if((mu-muprev)<0.000001) goto S10
就认为是相等了
------解决方案--------------------
这就要看你这两数是否真实的相等
按你格式输出小数点后面9位,输出的相等的,但是,你知道它9位后面是相等的么?
输出的时候是否会把实际的值进行了四舍五入呢?
所以,不能绝对的是相等的.
------解决方案--------------------
数据存储格式相关。

建议去查一下谭浩强的C语言,记得里面有解释。


------解决方案--------------------
楼主建议你去看下 float型与0值的比较 直接用=与!=来与0相比较是不行的

------解决方案--------------------
估计你使用的是不定参数?这是有可能的。不定参数不会替你做类型转换,加入你用int型传浮点数进去,就会如此

例如:
int a = 10;
float b=10;

printf("a=%f, b=%f", a,b);
你就可能看到很有趣的结果
探讨
程序代码出错,导致运行错误。。。。。。。。。。
0.00000000是随机值,事实上两个树不等。。。