Sprawdź dwie wartości float / double dla dokładnej równości
Jaki jest elegancki, czytelny i niewerbalny sposób porównywania dwóch wartości zmiennoprzecinkowych dla dokładnej równości?
Jakkolwiek to może brzmieć, jest to zły problem. The==
operator nie wykonuje pracy dla NaN i ma specjalne traktowanie dla zera:
(+0.0 == -0.0) -> true
Double.NaN == Double.NaN -> false
Ale chcę określić, czy dwie wartości są dokładnie takie same (ale ja to robię)nie dbać o różne wzory NaN, więc każdy NaN == dowolny inny NaN -> prawda).
I mogą zrób to z tym brzydkim fragmentem kodu Monster:
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
Czy jest lepszy sposób na napisanie tego (i uczynienie intencji oczywistym)?