c - 相同的浮点值比较不相等

标签 c floating-point

<分区>

我正在研究一些 C 语言的“确定输出”问题。我遇到了这个问题,表面上看起来很简单,但运行代码后让我感到困惑。

我预期的输出是“True”。但是在运行时,它是“False”。当我使用 printf() 检查 f 的值时,它显示为 0.1。有人可以解释为什么 f 被分配 0.1 不为 IF 语句返回 true 吗?

对于我选择问题的答案没有任何解释,我自己也找不到答案。

#include <stdio.h>

int main()
{
    float f = 0.1;
    if (f == 0.1)
        printf("True");
    else
        printf("False");
}

最佳答案

问题是变量 f 定义为 float 类型,而 float 常量 0.1 的类型为 doubledouble 类型比 float 类型更精确。它有更多的二进制数字来表示分数。所以在这个声明中

        float f = 0.1;

有一个截断。

为了得到预期的结果你至少应该写

        if (f == 0.1f)

另外,为了确保没有四舍五入,代码应该看起来像

#include <stdio.h>

int main( void )
{
    float f = 0.1f;

    if ( f == 0.1f )
        printf("True\n");
    else
        printf("False\n");
}

关于c - 相同的浮点值比较不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24853323/

相关文章:

c - 查找新的库符号

c - 如何使用 gets() 读取无符号字符数组?

c - 如何在 C double 中表示无穷大?

Python Decimal类型精度错误

java - 以编程方式区分整数浮点字符串

Perl 转换为 int 错误但仅限于特定数字

c++ - 接近零的浮点值会导致被零除的错误吗?

c - 在 C 中,我如何从文件中扫描并与另一个扫描进行比较

c - 为什么errno设置为22 : mq_open() POSIX

function - 制作以 Float 或 Double 作为输入的函数的最佳方法是什么?