我有一个Point3d
类,为此我创建了一个标量乘法运算符,如下所示:
Point3d operator*(double mul) { return {x*mul, y*mul, z*mul}; }
这似乎不能正确地乘以双打。在我的测试中,将Point3d
对象乘以10^-6
然后检查x
坐标,我得到.000002
。
但是,当用手乘以分量时,我得到2.1584e-06
。
前者绝对只有1位数的精度,因为如果运算符太小,Point3d
会转到0.0
。为什么会这样?
答案 0 :(得分:4)
如果您同时将它们写成 而不是指数,则会看到:
.000002
.0000021584
这意味着它们相等,直到前者停止。因此,几乎可以肯定,印刷可以带给您与众不同的价值。尝试使用类似的东西:
#include <cstdio>
:
printf("%.20f\n", myDouble); // I can't be bothered looking up the iomanp stuff :-)
这应该为您显示的比默认位数还多。