检查双精度值是否相等的最有效方法是什么。
我明白那个
double a = 0.00023d;
double b = 0.00029d;
boolean eq = (a == b);
是缓慢的。
所以我正在使用
double epsilon = 0.00000001d;
eq = Math.abs(a - b) < epsilon;
问题是Infinitest
抱怨测试花费了太多时间。这没什么大不了的(顶部 1 秒),但这让我很好奇。
附加信息
a
是硬编码的,因为它是预期值,b
由下式计算
// fyi: current = int, max = int
public double getStatus()
{
double value = 0.0;
if (current != 0 && max != 0)
value = ((double) current) / max;
return value;
}
更新
java.lang.Double 就是这样做的
public boolean equals(Object obj) {
return (obj instanceof Double)
&& (doubleToLongBits(((Double)obj).value) ==
doubleToLongBits(value));
}
因此可以假设这是最佳实践。