【发布时间】:2015-02-19 06:51:47
【问题描述】:
使用以下代码:
int ten{ 1 };
double zeroPnine{ 0.9 };
cout << ten - zeroPnine << endl; // 0.1
cout << (ten - zeroPnine) * 10 << endl; // 1
cout << static_cast <int>(ten - zeroPnine) << endl; // 0
cout << static_cast <int>((ten - zeroPnine) * 10 )<< endl; // 1
我期待最后一行输出1,但实际输出实际上是0,怎么会?
完整输出:
0.1
1
0
0
【问题讨论】:
-
由于计算机上浮点格式的不精确性,会导致舍入误差。
-
如果你在没有静态转换的情况下打印出最后一行,它会显示 1,或者至少接近 1。但是如果你说 "((ten - zeroPnine) * 10) == 1" ,因为 Joachim 所说的原因,它说的是假的。值不精确。浮点数应该依赖于相对值,而不是离散点。
-
0.9不是整数。 -
我知道 0.9 不是整数,但是 1 - 0.9 = 0.1,而 0.1 * 10 应该给我 1,为什么会有问题?
-
由于浮点数的工作方式,
0.9实际上是0.90000000000000002220446049250313080847263336181640625
标签: c++ c++11 visual-c++ static-cast