float - c数据类型

时间:2012-10-28 20:25:19

标签: c types floating-point floating-point-precision

int main() {
float a = 20000000;
float b = 1;
float c = a+b;

if (c==a) { printf("equal"); }

else { printf("not equal");}
return 0;
}

当我运行它时,它说“相等”。 但当我将a的值更改为2000000(少一个零)时答案是否定的。 为什么?

4 个答案:

答案 0 :(得分:7)

通常,float的精度为24位。数字20000001 = 0x1312d01需要精确表示25位,因此必须舍入。两个可表示值之间正好中间值的正常舍入模式是舍入到最后一位零,因此20000001舍入为20000000作为float

2000001 = 0x1e8481需要少于24位(21),因此不需要舍入。

答案 1 :(得分:3)

浮点数通常是近似值而不是精确值。你可以在这里阅读所有相关内容:

http://en.wikipedia.org/wiki/Floating_point

答案 2 :(得分:1)

如果你声明两个变量类型为float,那么你甚至可以将这两个值相同。如果比较相等,你会得到不可预测的结果。有关更多详细信息,请参阅Google标准(IEEE 754)以表示浮点数。 wikipedia article

答案 3 :(得分:0)