Heim > Java > javaLernprogramm > Warum ist der direkte Gleitkomma-Gleichheitsvergleich in Java problematisch und wie können wir Gleitkommazahlen richtig vergleichen?

Warum ist der direkte Gleitkomma-Gleichheitsvergleich in Java problematisch und wie können wir Gleitkommazahlen richtig vergleichen?

Mary-Kate Olsen
Freigeben: 2024-12-21 15:42:10
Original
284 Leute haben es durchsucht

Why is Direct Floating-Point Equality Comparison in Java Problematic, and How Can We Correctly Compare Floats?

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage