Heim >Backend-Entwicklung >PHP-Tutorial >Warum schlagen Gleitkommavergleiche in PHP manchmal fehl und wie können wir sie richtig vergleichen?

Warum schlagen Gleitkommavergleiche in PHP manchmal fehl und wie können wir sie richtig vergleichen?

DDD
DDDOriginal
2024-12-23 16:56:11765Durchsuche

Why Do Floating-Point Comparisons in PHP Sometimes Fail, and How Can We Correctly Compare Them?

Vergleich von Gleitkommazahlen in PHP

Beim Vergleich von Gleitkommazahlen in PHP ist es wichtig, mit subtilen Unterschieden in ihrer Darstellung und Genauigkeit umzugehen. Dies kann eine Herausforderung sein, wie der folgende Code zeigt:

<?php
$a = 0.17;
$b = 1 - 0.83; // 0.17

if ($a == $b) {
    echo 'a and b are same';
} else {
    echo 'a and b are not same';
}
?>

In diesem Code können Sie erwarten, dass die if-Bedingung wahr ist, da $a und $b denselben Wert darstellen. Die Auswertung ergibt jedoch unerwartet „falsch“, was darauf hinweist, dass $a und $b nicht gleich sind.

Warum der Vergleich fehlschlägt

Der Grund für diese Diskrepanz liegt in der internen Darstellung von Gleitkommazahlen in Computern. Bei diesen Zahlen handelt es sich um Näherungswerte, deren Genauigkeit begrenzt ist. Bei der Durchführung von Gleitkommaberechnungen können sich kleine Rundungsfehler ansammeln, die beim Vergleich auf Gleichheit zu unerwarteten Ergebnissen führen.

Handhabung von Gleitkomma-Vergleichen

Um dieses Problem zu beheben, sollten Sie den Vergleich von Gleitkommazahlen mithilfe von vermeiden strikter Gleichheitsoperator (==), es sei denn, Sie sind absolut sicher, dass sie denselben Wert darstellen. Verwenden Sie stattdessen die Funktion abs() und vergleichen Sie die absolute Differenz zwischen den beiden Werten mit einer kleinen akzeptablen Toleranz.

Sie könnten beispielsweise den folgenden Code verwenden, um $a und $b mit einer Toleranz von 0,00001 zu vergleichen :

if (abs(($a - $b) / $b) < 0.00001) {
    echo "a and b are same";
} else {
    echo "a and b are not same";
}

Diese Methode bietet eine zuverlässigere Möglichkeit, Floats für praktische Zwecke zu vergleichen.

Das obige ist der detaillierte Inhalt vonWarum schlagen Gleitkommavergleiche in PHP manchmal fehl und wie können wir sie richtig vergleichen?. 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