Dur*_*dal 16 java floating-point
什么是比较两个浮点值以获得精确相等的优雅,可读和非冗长的方法?
听起来很简单,这是一个邪恶的问题.该==
运营商没有得到楠所做的工作,也有特殊待遇的零:
(+0.0 == -0.0) -> true
Double.NaN == Double.NaN -> false
Run Code Online (Sandbox Code Playgroud)
但我想确定两个值是否完全相同(但我不关心不同的NaN模式,因此任何NaN ==任何其他NaN - > true).
我可以用这个丑陋的Monster代码做到这一点:
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来写这个(并使意图明显)?
Pet*_*rey 23
您可以使用
Double.compare(a, b) == 0
Run Code Online (Sandbox Code Playgroud)
来自于比较的javadoc
Jon*_*eet 10
我说,你所拥有的已经是最好的方式.它清楚地表明您对值的按位表示感兴趣.您碰巧将这些位转换long
为方便的64位类型,没有任何时髦的行为.
如果您不希望它经常出现在您的代码库中,只需添加一个方法来包装它:
public static boolean bitwiseEqualsWithCanonicalNaN(double x, double y) {
return Double.doubleToLongBits(x) == Double.doubleToLongBits(y);
}
Run Code Online (Sandbox Code Playgroud)
请注意,根据您的问题,这并没有不同的NaN值之间进行区分.如果您想在以后这样做,则需要使用Double.toRawLongBits
.
归档时间: |
|
查看次数: |
9352 次 |
最近记录: |