Überprüfen Sie zwei float / double-Werte auf exakte Gleichheit

Was ist eine elegante, lesbare und nicht ausführliche Methode, um zwei Gleitkommawerte auf exakte Gleichheit zu vergleichen?

So einfach es auch klingen mag, es ist ein böses Problem. Das== Der Bediener erledigt die Aufgabe für NaN nicht und hat auch eine Sonderbehandlung für Null:

(+0.0 == -0.0) -> true
Double.NaN == Double.NaN -> false

Ich möchte aber feststellen, ob zwei Werte genau gleich sind (aber ich tue esnicht Achten Sie auf verschiedene NaN-Muster, sodass jedes NaN == jedes andere NaN -> wahr ist.

I können Mach das mit diesem hässlichen Monster-Code:

Double.doubleToLongBits(a) == Double.doubleToLongBits(b)

Gibt es eine bessere Möglichkeit, dies zu schreiben (und die Absicht offensichtlich zu machen)?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage