Frage: Fallstricke bei der Verwendung von == für den Float-Vergleich in Java
Trotz seiner Präsenz als Gleichheitsoperator für Gleitkommazahlen in Java , == weist Einschränkungen beim Vergleich von Gleitkommazahlen auf, was durch statische Analysewarnungen wie „JAVA0078 Gleitkommawerte verglichen mit“ belegt wird ==".
Antwort: Das Präzisionsproblem
Gleitkommazahlen werden als Näherungen gespeichert und bei Operationen können Rundungsfehler auftreten. Folglich kann die Verwendung von == zum Vergleichen zweier Floats zu falsch negativen oder falschen Ergebnissen führen.
Der richtige Ansatz: Toleranzmarge
Der richtige Ansatz zum Vergleichen von Floats auf „Gleichheit“ Dabei wird geprüft, ob die absolute Differenz zwischen ihnen kleiner als ein vordefinierter Toleranzwert ist. Dadurch wird sichergestellt, dass der Vergleich Rundungsfehler berücksichtigt und mit der beabsichtigten Genauigkeit übereinstimmt:
if(Math.abs(sectionID - currentSectionID) < epsilon)
Auswahl des Epsilon-Werts
Die Auswahl eines geeigneten Epsilon-Werts hängt von der gewünschten Präzision ab. Für präzise Vergleiche werden kleinere Epsilon-Werte verwendet, während größere Epsilon-Werte größere Fehlermargen ermöglichen.
Das obige ist der detaillierte Inhalt vonWarum sollten Sie == nicht zum Vergleichen von Floats in Java verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!