C语言 关于判断一个浮点数是否等于0

我用的明明是if(y==0.0) 怎么结果没有出错???程序和运行结果见图

浮点数是近似值。 一般用精度判断
比如 判断是否为0 可以用
if(fabs(y)<1e-6)
这样就可以认为是为0 了。
直接==会不正确的。追问

我问的是 为什么我不用那个也能正确输出。。

追答

系统自动优化了。
很多系统都会自动优化这部分的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-18
楼上的都对,浮点数存在误差,直接==不行。左偏右偏或不偏,不确定
第2个回答  推荐于2017-12-16
因为浮点数在计算机的的存储和运算都会产生误差,所以,程序中应该尽量避免直接比较两个浮点数是否相等,而是改为判断二个浮点数之差的绝对值若小于一个很小的数(可自己设定)。条件满足时,即可认为该两个浮点数“相等”。
例如,要比较浮点数a与是否相等。
应该使用:
if(fabs(a-b)<1E-8)
printf("两个浮点数是相等的");追问

我问的是 问什么我不用那个也能正确输出。。

追答

这个出错,只是“有可能”,可能“左偏”,可能“右偏”,也可能偏得很小或“没偏”。

本回答被网友采纳
相似回答