gpt4 book ai didi

java - 为什么 Double.compare() 比较数字两次

转载 作者:行者123 更新时间:2023-12-01 16:53:39 25 4
gpt4 key购买 nike

我在 Debug模式下通过 F5 查看 Double.compare() 实现(复制粘贴)

public static int compare(double d1, double d2) {
if (d1 < d2)
return -1; // Neither val is NaN, thisVal is smaller
if (d1 > d2)
return 1; // Neither val is NaN, thisVal is larger

// Cannot use doubleToRawLongBits because of possibility of NaNs.
long thisBits = Double.doubleToLongBits(d1);
long anotherBits = Double.doubleToLongBits(d2);

return (thisBits == anotherBits ? 0 : // Values are equal
(thisBits < anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)
1)); // (0.0, -0.0) or (NaN, !NaN)
}

我期待类似的事情

public static int compare(double d1, double d2) {
if (d1 < d2)
return -1;
if (d1 > d2)
return 1;
return 0;
}

但不是 return 0; 该方法将 double 转换为位,并再次比较其中一个是否大于另一个

thisBits < anotherBits ? -1 : 1);

为什么第二次比较有冗余?

最佳答案

如果d1是一些类似 0.0 的数字和d2NaN ,然后d1 < d2将为 false 并且 d1 > d2也会为假,但这并不意味着 NaN等于 d1 。另外,如果d1-0.0d20.0 ,然后d1 < d2将是falsed1 > d2 为假,但是0.0应该大于-0.0 .

评论已经很清楚地说明了这一点。

关于java - 为什么 Double.compare() 比较数字两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35758297/

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