Fallstricke beim Float-Gleichheitsvergleich mit == in Java
Java stellt den ==-Operator für Gleichheitsvergleiche, einschließlich Gleitkommazahlen, bereit. Allerdings kann die Verwendung von == zum Vergleichen von Gleitkommazahlen zu überraschenden und unzuverlässigen Ergebnissen führen.
Im Gegensatz zu den Informationen auf der Java.sun-Seite kann die Verwendung von == für den Gleitkommavergleich statische Analysewarnungen wie „JAVA0078“ auslösen Gleitkommawerte verglichen mit ==" in IDEs. Dies liegt daran, dass Gleitkommazahlen in Java im Gleitkommaformat IEEE 754 dargestellt werden, was zu inhärenten Ungenauigkeiten führt.
Aufgrund von Einschränkungen bei der Gleitkommagenauigkeit werden Gleitkommawerte als Näherungen gespeichert. Operationen wie Addition, Subtraktion und Vergleich führen zu Rundungsfehlern, die sich im Laufe der Zeit anhäufen. Daher können direkte Vergleiche mit == „false“ zurückgeben, selbst wenn die Zahlen im Wesentlichen gleich sind.
Richtiger Ansatz: Epsilon-basierter Vergleich
Um gleitende Vergleiche zuverlässig durchzuführen- Für Punktwerte in Java empfiehlt sich die Verwendung eines Epsilon-basierten Vergleichs. Anstatt mit == auf exakte Gleichheit zu testen, prüfen wir, ob die absolute Differenz zwischen den beiden Zahlen kleiner als ein kleiner Schwellenwert namens Epsilon ist.
Der folgende Codeausschnitt zeigt die korrekte Methode zum Vergleichen von Gleitkommazahlen:
if (Math.abs(sectionID - currentSectionID) < epsilon)
Hier ist Epsilon eine vorgegebene, sehr kleine Zahl (z. B. 0,00000001), die den akzeptablen Bereich von definiert Abweichung für Gleichheit. Dieser Ansatz ermöglicht effektiv eine kleine Fehlerquote aufgrund von Gleitkomma-Ungenauigkeiten und gewährleistet so zuverlässige Gleichheitsprüfungen.
Das obige ist der detaillierte Inhalt vonWarum ist die Verwendung von „==' für den Float-Gleichheitsvergleich in Java unzuverlässig und was ist der richtige Ansatz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!