相关疑难解决方法(0)

与float和float文字相比较的奇怪输出

float f = 0.7;
if( f == 0.7 )
    printf("equal");
else
    printf("not equal");
Run Code Online (Sandbox Code Playgroud)

为什么输出not equal

为什么会这样?

c c++ floating-point double-precision

34
推荐指数
3
解决办法
6725
查看次数

3
推荐指数
1
解决办法
500
查看次数

比较相同的浮点数时奇怪的输出?

比较C中的相同浮点值

与float和float文字相比较的奇怪输出

浮动添加提升到双倍?


我在浮点上阅读了上面的链接,但是甚至得到了奇怪的输出.

#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.


请原谅我提出同样的问题,因为我已经从上面的链接中读到,浮动比较绝对不能完成.

但是,这种意外行为的原因是什么?

c floating-point precision

1
推荐指数
2
解决办法
228
查看次数

标签 统计

c ×3

floating-point ×3

c++ ×2

double-precision ×1

precision ×1