Heim >Java >javaLernprogramm >Warum ist der direkte Gleichheitsvergleich ('==') für Floats in Java problematisch?

Warum ist der direkte Gleichheitsvergleich ('==') für Floats in Java problematisch?

DDD
DDDOriginal
2024-12-23 08:05:44861Durchsuche

Why Is Direct Equality Comparison ('==') Problematic for Floats in Java?

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!

Stellungnahme:
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