3
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

4 回答 4

7

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

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

于 2012-10-28T20:33:42.357 回答
3

浮点数通常是近似值而不是精确值。你可以在这里读到所有和它有关的:

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

于 2012-10-28T20:30:53.887 回答
1

如果您将两个变量声明为 float 类型,那么即使您将这两个值相同。如果你比较相等,你会得到不可预测的结果。有关表示浮点数的 IEEE 标准 (IEEE 754) 的更多详细信息,请访问 Google。 维基百科文章

于 2012-10-28T20:32:00.443 回答