Heim >Java >javaLernprogramm >Warum ist der direkte Gleichheitsvergleich ('==') für Floats in Java problematisch?
Gleitkomma-Vergleichsrätsel in Java
Java bietet den Gleichheitsvergleichsoperator „==“, um Gleitkommawerte zu testen, wie dokumentiert auf java.sun. Die statische Analyse wirft jedoch häufig Bedenken hinsichtlich ihrer Verwendung zum Vergleichen von Floats auf.
Fallstricke von „==“ für Floats
Trotz der zugewiesenen Rolle des Operators „==“ für Bei Float-Vergleichen erweist es sich aufgrund der inhärenten Ungenauigkeit der Gleitkomma-Arithmetik als problematisch. Gleitkommawerte werden intern als endliche Dezimalentwicklungen dargestellt, was bei Berechnungen zu Rundungsfehlern und Kürzungen führt. Infolgedessen können sich zwei Gleitkommazahlen, die logischerweise gleich sein sollten, um einen winzigen Betrag unterscheiden. Diese Varianz kann zu falsch positiven oder negativen Ergebnissen führen, wenn „==“ zur Bestimmung der Gleichheit verwendet wird.
Bevorzugter Ansatz für Float-Gleichheit
Um Floats genau auf „Gleichheit“ zu testen, ' Es wird empfohlen, ihre absolute Differenz mit einem Toleranzschwellenwert (Epsilon) zu vergleichen. Dieser Epsilon-Wert sollte extrem klein sein und entsprechend der gewünschten Genauigkeit skaliert werden.
Wenn beispielsweise sectionID und currentSectionID Float-Variablen sind, bietet das folgende Codefragment eine zuverlässige Methode:
if (Math.abs(sectionID - currentSectionID) < epsilon) { // They are considered 'equal' }
In diesem Zusammenhang könnte Epsilon auf 0,00000001 oder einen benutzerdefinierten Wert basierend auf der erforderlichen Genauigkeit festgelegt werden. Durch die Verwendung von Math.abs stellen wir sicher, dass der Vergleich unabhängig von den Vorzeichen der Operanden ist.
Schlussfolgerung
Während „==“ die vorgesehene Gleichheit zu sein scheint Operator für Gleitkommazahlen, seine Unzulänglichkeiten bei der genauen Handhabung von Gleitkomma-Ungenauigkeiten machen ihn für präzise Vergleiche ungeeignet. Die bevorzugte Lösung besteht darin, die absolute Differenz mit einem geeigneten Toleranzschwellenwert zu vergleichen und so zuverlässige Gleichheitsbewertungen für Gleitkommawerte in Java bereitzustellen.
Das obige ist der detaillierte Inhalt vonWarum ist der direkte Gleichheitsvergleich ('==') für Floats in Java problematisch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!