飞镖双分精度

2023-12-05

执行此操作的正确方法是什么?

399.9 / 100

我期望看到的是

3.999

但结果是

3.9989999999999997

你看到的结果是correct,这不是你想要的。

双精度数不是精确值。写 399.9 得到的双倍实际上是精确值。

399.8999999999999772626324556767940521240234375

这是最接近精确值 399.9 的可用双精度值。任何其他双倍至少与 399.9 相差那么远。

然后除以 100。同样,结果不精确,但最接近的 double 具有精确值

3.99899999999999966604491419275291264057159423828125

这与您通过编写 3.999 得到的值不同,后者是精确值:

3.999000000000000110134124042815528810024261474609375

在每一步中,双精度运算都已将误差最小化,但由于您正在执行多个步骤,因此最终结果与最接近数学结果的双精度结果有所不同。

您需要做什么取决于您的实际要求。

如果你想总是使用两位有效数字进行计算,那么我只需将我的数字乘以 100,并将所有运算作为整数运算进行,直到最后除以 100。

如果您有中间结果并希望将其四舍五入为两位数,我会按照 Fy Z1K 所说的操作:

  result = (result * 100).round() / 100;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

飞镖双分精度 的相关文章