Heim > Artikel > Backend-Entwicklung > Warum führt der Vergleich von Float- und Double-Variablen auf Gleichheit manchmal zu unerwarteten Ergebnissen?
Warum die Gleichheit von Double- und Float-Variablen trügerisch sein kann
Gleitkomma-Datentypen wie Float und Double sind für die Darstellung reeller Zahlen unerlässlich Programmierung. Allerdings ist es wichtig, ihre Nuancen zu verstehen, um überraschende Ergebnisse zu vermeiden.
Präzision und Rundung: Schelmische Effekte
Float- und Double-Variablen haben eine begrenzte Genauigkeit, was bedeutet, dass sie nur a speichern können endliche Anzahl von Ziffern ohne Informationsverlust. Diese inhärente Einschränkung führt zu Rundungsfehlern, bei denen die interne Darstellung einer Zahl gekürzt wird, um in den verfügbaren Platz zu passen.
Ein veranschaulichendes Beispiel
Betrachten Sie die dargestellten Zahlen 1.1 sowohl als Float als auch als Double. Aufgrund der begrenzten Präzision werden sie intern als Näherungen dargestellt:
float f = 1.1; // Internally stored as an approximation double d = 1.1; // Internally stored as an approximation
Der Vergleich von f und d auf Gleichheit ergibt „falsch“, da die Rundungsfehler zu unterschiedlichen internen Darstellungen führen, obwohl sie die „gleiche“ Zahl darstellen.
Das Problem vermeiden
Um irreführende Vergleiche zu vermeiden, vermeiden Sie am besten die Verwendung des Gleichheitsoperators (==) für Gleitkommazahlen. Führen Sie stattdessen einen Toleranzschwellenwert (Epsilon) ein und vergleichen Sie die Differenz zwischen den Zahlen, um festzustellen, ob sie innerhalb des akzeptablen Bereichs liegt:
if (abs(f - d) < epsilon) { // They are considered equal within the tolerance }
Wenn Sie die Fallstricke von Float- und Double-Vergleichen verstehen, können Sie unerwartete Ergebnisse vermeiden Stellen Sie die Genauigkeit Ihres Codes sicher.
Das obige ist der detaillierte Inhalt vonWarum führt der Vergleich von Float- und Double-Variablen auf Gleichheit manchmal zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!