float f = 0.7;
if( f == 0.7 )
printf("equal");
else
printf("not equal");
Run Code Online (Sandbox Code Playgroud)
为什么输出not equal?
为什么会这样?
可能重复:
与float文字的float比较中的奇怪输出
float a = 0.7;
if (a < 0.7) ;
Run Code Online (Sandbox Code Playgroud)
为什么这里的表达式评估为真?
我在浮点上阅读了上面的链接,但是甚至得到了奇怪的输出.
#include<stdio.h>
int main()
{
float x = 0.5;
if (x == 0.5)
printf("IF");
else if (x == 0.5f)
printf("ELSE IF");
else
printf("ELSE");
}
Run Code Online (Sandbox Code Playgroud)
现在,根据促销规则,不应该打印" ELSE IF "吗?
但是,这里是打印" IF "
编辑:是因为0.5 = 0.1二进制,之后一切都为0并且精度损失因此没有影响,因此比较IF返回true.
如果它是0.1,0.2,0.3,0.4,0.6,0.7 ....那么Else If块返回true.
请原谅我提出同样的问题,因为我已经从上面的链接中读到,浮动比较绝对不能完成.
但是,这种意外行为的原因是什么?