Fallstricke des Gleitkomma-Gleichheitsvergleichs in Java
Java-Entwickler stoßen oft auf Verwirrung, wenn sie den Gleichheitsoperator (==) zum Vergleich von Gleitkommazahlen verwenden -Punktzahlen. Obwohl die Dokumentation die Gültigkeit für Gleitkomma-Vergleiche angibt, kennzeichnen statische Analysetools solche Vergleiche als falsch.
Warum ist == problematisch für Gleitkommazahlen?
Gleitkommazahlen stellen Dezimalwerte im Binärformat mit einer bestimmten Genauigkeit dar. Aufgrund dieser inhärenten Ungenauigkeit kann das Ergebnis von Gleitkommaberechnungen geringfügige Fehler enthalten. Diese Fehler können bei Gleichheitsprüfungen zu unerwarteten Vergleichen führen.
Die richtige Methode zum Vergleichen von Gleitkommazahlen
Um die Fallstricke der Gleitkommagleichheit zu mildern, wird die Verwendung empfohlen stattdessen ein toleranzbasierter Ansatz. Die empfohlene Lösung besteht darin, zu testen, ob die absolute Differenz zwischen den beiden Floats kleiner als ein vordefinierter Schwellenwert ist, der als Epsilon bezeichnet wird. Hier ist der empfohlene Code:
if(Math.abs(sectionID - currentSectionID) < epsilon)
Epsilon ist eine sehr kleine Zahl, typischerweise etwa 0,00000001, die den akzeptablen Grad an Ungenauigkeit darstellt. Dieser Ansatz toleriert kleinere Fehler bei Gleitkommaberechnungen und gewährleistet so genaue Gleichheitsprüfungen. Durch die Verwendung dieses modifizierten Vergleichs können Sie die Fallstricke der Verwendung von == für Gleitkommagleichheit in Java vermeiden.
Das obige ist der detaillierte Inhalt vonWarum ist der direkte Gleitkomma-Gleichheitsvergleich in Java problematisch und wie können wir Gleitkommazahlen richtig vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!