Heim > Backend-Entwicklung > PHP-Problem > Besprechen Sie das Problem ungleicher Gleitkommazahlen in PHP

Besprechen Sie das Problem ungleicher Gleitkommazahlen in PHP

PHPz
Freigeben: 2023-03-21 15:38:01
Original
1563 Leute haben es durchsucht

PHP ist eine beliebte Programmiersprache und eine serverseitige Skriptsprache. In PHP verfügt es über flexible und leistungsstarke Funktionen und wird daher häufig im Bereich der Webentwicklung eingesetzt.

Bei der PHP-Programmierung stoßen wir häufig auf Berechnungen von Gleitkommazahlen. Da die Nachkommazahlen von Gleitkommazahlen jedoch schwer genau darzustellen sind, führt dies häufig zu falschen Ergebnissen beim Vergleich, ob zwei Gleitkommazahlen gleich sind . Ergebnis.

Lassen Sie uns das Problem ungleicher Gleitkommazahlen in PHP diskutieren.

Eigenschaften von Gleitkommazahlen

Eine Gleitkommazahl ist eine Zahl, die zur Darstellung von Dezimalzahlen verwendet wird. Sie besteht aus zwei Elementen: der Mantisse und dem Exponenten. Im IEEE 754-Standard werden Gleitkommazahlen binär dargestellt.

Da sich die Genauigkeit von Gleitkommazahlen mit der Größe des Werts ändert, müssen Sie bei der Durchführung von Vergleichsoperationen auf die Eigenschaften von Gleitkommazahlen achten.

Zum Beispiel:

$a = 0.1 + 0.2;
$b = 0.3;
echo ($a == $b) ? "Equal" : "Not Equal";
Nach dem Login kopieren

Wir erwarten, dass das Ausgabeergebnis gleich ist. Das tatsächliche Ausgabeergebnis ist jedoch „Ungleich“.

Warum ist das so? Dies liegt daran, dass Gleitkommazahlen in Computern in Binärform gespeichert werden, sodass 0,1 und 0,2 bei der Umwandlung in Binärzahlen eine unendlich wiederkehrende Dezimalzahl sind und der Computer nur eine begrenzte Anzahl von Ziffern zum Speichern verwenden kann. Wenn der Computer daher 0,1 und 0,2 in Binärwerte umwandelt, werden sie nicht genau gespeichert und das Endergebnis weicht leicht ab. Diese Abweichung summiert sich während des Additionsvorgangs und führt dazu, dass das Ergebnis nicht dem erwarteten Wert entspricht.

Der richtige Weg, Gleitkommazahlen zu vergleichen

In PHP gibt es mehrere Möglichkeiten, zwei Gleitkommazahlen auf Gleichheit zu vergleichen. Lassen Sie uns diese Methoden im Folgenden vorstellen.

Methode 1: Verwenden Sie die Funktion „round()“, um den Fehler zu überprüfen.

Die Funktion „round()“ kann Gleitkommazahlen auf eine bestimmte Anzahl von Stellen runden. Wenn wir also zwei Gleitkommazahlen auf Gleichheit vergleichen möchten, können wir sie zunächst mit der Funktion „round()“ auf die gleiche Anzahl von Dezimalstellen runden und sie dann vergleichen.

Zum Beispiel:

$a = 0.1 + 0.2;
$b = 0.3;
$precision = 14;
if (round($a, $precision) == round($b, $precision)) {
  echo "Equal";
} else {
  echo "Not Equal";
}
Nach dem Login kopieren

Im obigen Beispiel gibt die Variable $precision die Anzahl der zu rundenden Dezimalstellen an. In diesem Beispiel verwenden wir die Funktion „round()“, um zwei Zahlen auf 14 Dezimalstellen zu runden und sie dann zu vergleichen, um das richtige Ergebnis zu erhalten.

Methode 2: Verwenden Sie die präzise Berechnungsbibliothek

Wenn wir einen präzisen Gleitkommavergleich durchführen müssen, können wir die von PHP bereitgestellte präzise Berechnungsbibliothek verwenden. Diese Bibliothek stellt einige Funktionen bereit, mit denen hochpräzise Berechnungen für Gleitkommazahlen durchgeführt werden können, wodurch Fehler vermieden werden, die bei Operationen mit Gleitkommazahlen auftreten.

Zu den häufig verwendeten Bibliotheken für genaue Berechnungen gehören BC Math- und GMP-Bibliotheken. Beide Bibliotheken bieten eine Reihe von Funktionen, mit denen verschiedene hochpräzise Gleitkommaoperationen ausgeführt werden können. Die Berechnungsergebnisse stimmen mit den tatsächlichen Ergebnissen überein.

Zum Beispiel:

$a = "0.1";
$b = "0.2";
$c = "0.3";
$sum = bcadd($a, $b, 2); // 计算a和b的和
if (bccomp($sum, $c, 2) == 0) { // 比较计算结果和期望结果
  echo "Equal";
} else {
  echo "Not Equal";
}
Nach dem Login kopieren

Im obigen Beispiel verwenden wir die Funktion bcadd(), um den Wert der Variablen $sum zu berechnen, und verwenden dann die Funktion bccomp(), um zu vergleichen, ob die Werte von $sum und $ c sind gleich. Die Funktion bccomp() gibt 0 für Gleichheit, 1 für $sum größer als $c und -1 für $sum kleiner als $c zurück.

Fazit

Aufgrund der Eigenschaften von Gleitkommazahlen müssen wir beim Vergleich von Gleitkommazahlen auf Gleichheit achten. Wir können nicht einfach „==“ zum Vergleich verwenden, sondern sollten andere Vergleichsmethoden verwenden. wie Rundungen und genaue Berechnungen warten. Nur wenn wir die richtige Vergleichsmethode beherrschen, können wir Gleitkommazahlenoperationen in PHP korrekt verarbeiten.

Das obige ist der detaillierte Inhalt vonBesprechen Sie das Problem ungleicher Gleitkommazahlen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage