Heim > Java > javaLernprogramm > Warum ist die Verwendung von „==' für den Float-Gleichheitsvergleich in Java unzuverlässig und was ist der richtige Ansatz?

Warum ist die Verwendung von „==' für den Float-Gleichheitsvergleich in Java unzuverlässig und was ist der richtige Ansatz?

DDD
Freigeben: 2024-12-23 14:13:15
Original
160 Leute haben es durchsucht

Why is using `==` for float equality comparison in Java unreliable and what's the correct approach?

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage