大于C中浮点数的比较

Avi*_*osh 3 c

请考虑以下代码:

float x = 0.1;
if ( x> 0.1){
    printf("if");
}
Run Code Online (Sandbox Code Playgroud)

现在,当我检查相等性时,可以解释x通过在末尾填充0来转换为double,但是RHS上的0.1存储为double,因此不等式.但是,如果我通过这个逻辑,上面代码中的"if"应该给出错误,但事实确实如此.为什么?

Bat*_*eba 7

(限制IEEE754的答案,尽管C支持的所有浮点方案都要求该double集合是集合的超float集.)

0.10.1000000000000000055511151231257827021181583404541015625

0.1f0.100000001490116119384765625.

0.100000001490116119384765625被提升为a double,但它的数字相同,因为所有floats都可以double完全表示为s.

因此(double)(0.1f),大于0.1,取决于结果.