请考虑以下代码:
float x = 0.1;
if ( x> 0.1){
printf("if");
}
Run Code Online (Sandbox Code Playgroud)
现在,当我检查相等性时,可以解释x通过在末尾填充0来转换为double,但是RHS上的0.1存储为double,因此不等式.但是,如果我通过这个逻辑,上面代码中的"if"应该给出错误,但事实确实如此.为什么?
(限制IEEE754的答案,尽管C支持的所有浮点方案都要求该double集合是集合的超float集.)
0.1 是 0.1000000000000000055511151231257827021181583404541015625
0.1f是0.100000001490116119384765625.
0.100000001490116119384765625被提升为a double,但它的数字相同,因为所有floats都可以double完全表示为s.
因此(double)(0.1f),大于0.1,取决于结果.
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |