重载double时,结构运算符会失去精度

时间:2019-05-04 03:49:17

标签: c++

我有一个Point3d类,为此我创建了一个标量乘法运算符,如下所示:

Point3d operator*(double mul) { return {x*mul, y*mul, z*mul}; }

这似乎不能正确地乘以双打。在我的测试中,将Point3d对象乘以10^-6然后检查x坐标,我得到.000002

但是,当用手乘以分量时,我得到2.1584e-06

前者绝对只有1位数的精度,因为如果运算符太小,Point3d会转到0.0。为什么会这样?

1 个答案:

答案 0 :(得分:4)

如果您同时将它们写成 而不是指数,则会看到:

.000002
.0000021584

这意味着它们相等,直到前者停止。因此,几乎可以肯定,印刷可以带给您与众不同的价值。尝试使用类似的东西:

#include <cstdio>
:
printf("%.20f\n", myDouble); // I can't be bothered looking up the iomanp stuff :-)

这应该为您显示的比默认位数还多。