在用作模板参数的类的成员函数中,我有一个包含以下代码的函数:
double x = /*Something operation returning double*/;
x /= CubeWidth; /*CubeWidth is a class member*/
cout << "Element after centering and normalization = " << x << endl;
cout << "and after adding 1 and truncating = " << x+1 << endl;
cout << "then static cast = " << (int) x+1 << endl;
此功能的输出是
Element after centering and normalization = 1
and after adding 1 and truncating = 2
then static cast = 1
显然,最后一行应给出答案2.
如果我在不使用它作为模板参数的情况下实例化完全相同的类,我不会得到这个打印输出,而是我有正确的。
谁能告诉我为什么会这样?
答案 0 :(得分:3)
很可能x
(双倍)不完全是1
,而是0.9999999...
。通过打印x==1.0
或x<1.0
检查其确切值,看看究竟是什么。或者在输出中添加更多数字:
cout << "and after adding 1 and truncating = " << setprecision( 15 ) << x+1 << endl;
舍入为整数将丢弃逗号后的所有数字,因此1.999999...
变为1
。