gpt4 book ai didi

java - 双重比较。不同结果的解释

转载 作者:行者123 更新时间:2023-12-01 13:34:53 26 4
gpt4 key购买 nike

我尝试训练 SCJP。

我有这个代码:

 System.out.println(0.8==0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1);//false
System.out.println(0.8==((0.1+0.1)+(0.1+0.1))+((0.1+0.1)+(0.1+0.1))); // true

输出:

true
false

我知道正确的比较是这样的:

abs(a1-a2)<epsilon

但是这个结果对我来说很奇怪。谁能帮我解释一下?

对于 scjp 是否存在有效的类似问题?

最佳答案

在 Java 中, double 值是 IEEE float 。除非它们是 2 的幂(或 2 的幂之和,例如 1/8 + 1/4 = 3/8),否则即使它们具有高精度,也无法准确表示。某些浮点运算会加剧这些 float 中存在的舍入误差。如果您遇到上述情况:0.1+0.1....8 次的总和结果为 0.79999999999999999,而第二个总和的结果为 0.8,结果为 true。

关于java - 双重比较。不同结果的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21364992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com