Una forma sencilla de comprobar java.lang.Double para la igualdad
¿Cuál es la forma más eficaz de verificar la igualdad de valores dobles?
Entiendo que
double a = 0.00023d;
double b = 0.00029d;
boolean eq = (a == b);
es lento.
Entonces estoy usando
double epsilon = 0.00000001d;
eq = Math.abs(a - b) < epsilon;
El problema es eseInfinitest
es complaning acerca de las pruebas que toman demasiado tiempo. No es un gran problema (1 seg arriba), pero me dio curiosidad.
información adicional
a
está codificado duro ya que es el valor esperado,b
es computado por
// fyi: current = int, max = int
public double getStatus()
{
double value = 0.0;
if (current != 0 && max != 0)
value = ((double) current) / max;
return value;
}
Actualizar
java.lang.Double lo hace de esa manera
public boolean equals(Object obj) {
return (obj instanceof Double)
&& (doubleToLongBits(((Double)obj).value) ==
doubleToLongBits(value));
}
así que uno podría asumir que esa es la mejor práctica.