Forma de desempenho para verificar java.lang.Double para igualdade
Qual é a maneira mais eficaz de verificar valores duplos para igualdade.
Eu entendi aquilo
double a = 0.00023d;
double b = 0.00029d;
boolean eq = (a == b);
é lento.
Então estou usando
double epsilon = 0.00000001d;
eq = Math.abs(a - b) < epsilon;
O problema é queInfinitest
está elogiando os testes que levam muito tempo. Não é grande coisa (1 segundo no topo), mas me deixou curioso.
informação adicional
a
é codificado por ser o valor esperado,b
é calculado por
// fyi: current = int, max = int
public double getStatus()
{
double value = 0.0;
if (current != 0 && max != 0)
value = ((double) current) / max;
return value;
}
Atualizar
java.lang.Double faz desse jeito
public boolean equals(Object obj) {
return (obj instanceof Double)
&& (doubleToLongBits(((Double)obj).value) ==
doubleToLongBits(value));
}
Então, pode-se supor que essa é a melhor prática.