Unerwartetes Ergebnis beim Vergleich von Double und Float
Der Vergleich zwischen einer Float-Variablen f und einer Double-Variablen d mit demselben Wert ergibt überraschenderweise 1,1 FALSCH. Dieses unerwartete Ergebnis ist auf die grundlegenden Eigenschaften von Gleitkommazahlen zurückzuführen.
Präzision und Rundung in Gleitkommazahlen
Gleitkommazahlen, einschließlich Float- und Double-Typen , haben inhärente Einschränkungen:
Präzision: Gleitkommazahlen stellen reelle Zahlen innerhalb einer endlichen Grenze signifikanter Stellen dar. Werte, die eine höhere Präzision erfordern, als der Datentyp verarbeiten kann, führen zu abgeschnittenen Darstellungen.
Rundung: Binärzahlen haben nicht immer exakte Dezimaldarstellungen. Bei der Konvertierung von binär in dezimal erfolgt eine Rundung, um der begrenzten Genauigkeit von Gleitkommatypen gerecht zu werden.
Auswirkungen auf Vergleiche
Aufgrund dieser Faktoren sind Float- und Double-Werte unterschiedlich Rundungsfehler vorbehalten. Diese Fehler können beim Vergleich zweier Zahlen, die gleich sein sollten, zu Unstimmigkeiten führen. Im gegebenen Beispiel weisen die Float- und Double-Darstellungen von 1.1 aufgrund der Rundung leichte Abweichungen auf, was zu dem kontraintuitiven Ergebnis von f != d führt.
Best Practice
Vermeiden Sie direkte Gleichheitsvergleiche zwischen Gleitkommazahlen. Entscheiden Sie sich stattdessen dafür, die absolute Differenz zwischen den Werten auszuwerten und sie mit einem akzeptablen Schwellenwert (Epsilon) zu vergleichen:
if (abs(x - y) < epsilon) { ... }
Dieser Ansatz berücksichtigt die inhärenten Ungenauigkeiten bei Gleitkommaoperationen und bietet eine zuverlässigere Möglichkeit Bestimmen Sie, ob zwei Werte im Wesentlichen gleich sind.
Das obige ist der detaillierte Inhalt vonWarum gibt der Vergleich eines Floats und eines Doubles mit demselben Wert „Falsch' zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!