比较浮动和双重

Cha*_*hak 3 c floating-point floating-point-conversion

#include <stdio.h>
int main(void){
    float a = 1.1;
    double b = 1.1;
    if(a == b){
        printf("if block");
    }
    else{
        printf("else block");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印:else阻止

#include <stdio.h>
int main(void){
    float a = 1.5;
    double b = 1.5;
    if(a == b){
        printf("if block");
    }
    else{
        printf("else block");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印:如果阻止

这背后的逻辑是什么?

编译使用:gcc-4.3.4

Mys*_*ial 6

这是因为1.1在二进制浮点中不能完全表示.但是1.5.

因此,floatdouble表示将保持略有不同的值1.1.

当写成二进制浮点时,这正是区别的:

(float) 1.1 = (0.00011001100110011001101)?
(double)1.1 = (0.0001100110011001100110011001100110011001100110011010)?
Run Code Online (Sandbox Code Playgroud)

因此,当您比较它们(并且float版本被提升)时,它们将不相等.