Was ist eine elegante, lesbare und nicht-verbose Art des Vergleichens zweier Gleitkommazahl für exakte Gleichheit?Überprüfen Sie zwei float/double-Werte für exakte Gleichheit
So einfach es klingen mag, es ist ein böses Problem. Der ==
Operator wird nicht den Job für NaN getan und hat auch eine besondere Behandlung für Null:
(+0.0 == -0.0) -> true
Double.NaN == Double.NaN -> false
Aber ich will, um zu bestimmen, ob zwei Werte sind genau die gleichen (aber ich nicht Pflege für verschiedene NaN Muster, also jedes NaN == irgendein anderes NaN -> wahr).
ich kann tut dies mit diesem hässlichen Monster Stück Code:
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
Gibt es einen besseren Weg, dies zu schreiben (und die Absicht offensichtlich zu machen)?
Sie nicht Tag, warum Sie dies tun möchten. Wenn sie wirklich Gleitkommazahlen sind, wird Ihre Antwort nicht sinnvoll sein. – Julian
@Julian Siehe PeterLawreys Antwort für ein Beispiel, wo es sehr bedeutungsvoll ist. Meine Anwendung ist jedoch die equals() -Methode eines Objekts, wo ein float Teil des Primärschlüssels ist (nicht nach meiner Wahl). Der Gleitkomma-Wert widerspricht gewöhnlich intuitiven Annahmen, weshalb ich darauf achten muss, dass die Randfälle abgedeckt werden. – Durandal
Sorry, du könntest es nicht besser machen, dein "hässliches Monsterstück" ist schon perfekt ... –