Heim >Backend-Entwicklung >C++ >Warum gibt der Vergleich von „float'- und „double'-Werten manchmal „false' zurück, selbst wenn sie identisch erscheinen?
Unerwartete Ergebnisse beim Vergleich von Double- und Float-Datentypen
Beim Vergleich von Gleitkommazahlen mit doppelter Genauigkeit (double) und Gleitkommazahlen mit einfacher Genauigkeit Wenn Sie Zahlen (Floatzahlen) verwenden, kann es zu unerwarteten Ergebnissen kommen. Insbesondere kann die Gleichheitsprüfung (f == d) zwischen einer Float-Variablen f und einer Double-Variablen d „falsch“ zurückgeben, obwohl beide Werte identisch zu sein scheinen.
Dieses Verhalten ist auf zwei grundlegende Faktoren zurückzuführen, die mit Floating verbunden sind: Punktzahlen: Präzision und Rundung.
Präzisions- und Rundungsfehler
Auswirkungen auf Gleichheitsprüfungen
Die Präzision und Rundung, die Gleitkommazahlen innewohnt Punktzahlen können zu Rundungsfehlern führen, insbesondere wenn sehr nahe beieinander liegende Werte verglichen werden. Diese Fehler häufen sich und führen dazu, dass der Gleichheitsvergleich fehlschlägt. Dies macht die direkte Gleichheitsprüfung für Gleitkommazahlen unzuverlässig und anfällig für falsch negative Ergebnisse.
Lösung: Vergleich mit einem Epsilon
Anstelle der Verwendung von Gleichheitsprüfungen ist eine zuverlässigere Die Methode zum Vergleichen von Gleitkommazahlen besteht darin, die absolute Differenz zwischen ihnen zu nehmen und zu prüfen, ob sie unter einem kleinen Wert liegt, der als Epsilon (ε) bezeichnet wird. Dadurch können Sie Rundungsfehler berücksichtigen und feststellen, ob die Differenz für Ihre Anwendung unbedeutend ist.
if (abs(x - y) < epsilon)
Das obige ist der detaillierte Inhalt vonWarum gibt der Vergleich von „float'- und „double'-Werten manchmal „false' zurück, selbst wenn sie identisch erscheinen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!