Heim  >  Artikel  >  Backend-Entwicklung  >  Warum gibt der Vergleich eines Floats und eines Doubles mit demselben Wert „Falsch“ zurück?

Warum gibt der Vergleich eines Floats und eines Doubles mit demselben Wert „Falsch“ zurück?

DDD
DDDOriginal
2024-10-31 15:40:56470Durchsuche

Why Does Comparing a Float and a Double With the Same Value Return False?

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!

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