这是关于Java的。据我了解,由于二进制表示形式,Java 无法完美表示 0.1。这使得
0.1 + 0.1 + 0.1 == 0.3
错误的。然而,为什么
0.1 + 0.1 == 0.2
给出真实的?
由于二进制表示形式,0.1 无法用 Java 完美表示。这使得
0.1 + 0.1 + 0.1 == 0.3
false.
这并不是等式错误的全部原因,尽管它是其中的一部分。0.3
也不完全是 3/10。恰巧的是0.2
正好是两倍0.1
(虽然它们分别不是 2/10 和 1/10),并且添加0.1
to 本身产生的值也是您键入常量时得到的值0.2
。另一方面,操作后得到的整体近似值0.1 + 0.1 + 0.1
与近似分离略有不同0.3
从 3/10 开始。
如果我们使用具有 5 位有效数字的小数,您可能会惊讶于 1 / 3 * 3 == 1 不成立(1 / 3 将计算为 0.33333,乘以 3 将计算为 0.99999,这与 1 不同),而 1 / 4 * 4 == 1 确实成立(1 / 4 将计算为 0.25,乘以 4 将计算为 1)。
你的问题有点类似于这个,但是是针对以 2 为基数的计算。每个常数和运算都是一个近似的机会。有时近似值不会发生,有时近似值会发生但会相互抵消,因此最终结果比您预期的更准确。如果是0.1 + 0.1
,结果不是 2/10,但它与您编写时得到的 2/10 的近似值相同0.2
,因此等式成立。和0.1 + 0.1 + 0.1
我们碰巧没有那么幸运。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)