Compruebe dos valores float / double para la igualdad exacta
¿Cuál es una manera elegante, legible y no verbosa de comparar dos valores de punto flotante para una igualdad exacta?
Tan simple como puede sonar, es un problema perverso. los==
el operador no hace el trabajo para NaN y también tiene un tratamiento especial para cero:
(+0.0 == -0.0) -> true
Double.NaN == Double.NaN -> false
Pero quiero determinar si dos valores son exactamente iguales (pero lo hagono cuidar diferentes patrones de NaN, por lo que cualquier NaN == cualquier otro NaN -> verdadero).
I puede haz esto con este código de Monster feo:
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
¿Hay una mejor manera de escribir esto (y hacer la intención obvia)?