【发布时间】:2017-11-23 17:11:21
【问题描述】:
考虑以下代码:
float x = 0.1;
if ( x> 0.1){
printf("if");
}
现在,当我检查相等性时,说明 x 通过在末尾填充 0 被转换为 double,但 RHS 上的 0.1 存储在 double 中,因此不等式。 但是如果我通过这个逻辑,上面代码中的“if”应该是假的,但它却是真的。 为什么?
【问题讨论】:
-
浮点数并不完全精确。它们不能代表每个数字,因此会有舍入误差。在这种情况下,它显然向上舍入到一个比
0.1稍大一点的值。 -
@ChristianGibbons -- 请注意常量
0.1也是一个浮点值,不准确地表示为double。 -
@DavidBowling 确实如此。这是我的疏忽错误。
-
float x = 0.1;已经发生四舍五入(向上)只是一个疏忽。
标签: c