Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte grafische Erläuterung der PHP-Gleitkommazahlen-Vergleichsmethode
In diesem Artikel wird hauptsächlich die Vergleichsmethode für PHP-Gleitkommazahlen vorgestellt, die einen guten Referenzwert hat. Werfen wir einen Blick darauf mit dem Editor unten
Das Problem der Genauigkeit von Gleitkommaoperationen
Schauen Sie sich zunächst ein Beispiel an:
<?php $a = 0.1; $b = 0.9; $c = 1; var_dump(($a+$b)==$c); var_dump(($c-$b)==$a); ?>
$a+$b==$c gibt wahr, richtig zurück
$c-$b==$a gibt falsch, Fehler zurück
Warum passiert das?
Nach dem Vorgang lautet der tatsächlich zurückgegebene Inhalt bei einer Genauigkeit von 20 Stellen wie folgt:
<?php $a = 0.1; $b = 0.9; $c = 1; printf("%.20f", $a+$b); // 1.00000000000000000000 printf("%.20f", $c-$b); // 0.09999999999999997780 ?>
Umrechnungsmethode für Gleitkommazahlen
Der ganzzahlige Teil wird durch
durch 2 geteilt, um den Rest zu erhaltenMethode
Der Dezimalteil wird mit der Methode multipliziert mit 2 gerundet
Beispiel: Konvertieren Sie die Zahl 8,5 in eine Binärzahl
Der ganzzahlige Teil ist 8
8/2=4 8%2=0 4/2=2 4%2=0 2/2=1 2%2=01 ist kleiner als 2, daher besteht keine Notwendigkeit, es zu berechnen. Das Binärsystem der ganzen Zahl 8 ist
1000Der Dezimalteil ist 0,5
0,5x2 = 1,0Weil der Dezimalteil danach 0 ist Rundung, keine Berechnung mehr nötigDezimal Das Binärsystem von 0,5 ist 0,1 >
0,9x2=1,8
0,8x2=1,60,6x2=1,2
0,2x2=0,40,4x2=0,8
0,8x2=1,6…. Danach wird die Schleife fortgesetzt , was zu einem Genauigkeitsverlust führt. Im obigen Beispiel geht die Genauigkeit von 0,9 bei der Konvertierung in Binär verloren, was zu Fehlern beim Vergleich führt.
Glauben Sie also niemals, dass eine Gleitkommazahl bis zur letzten Ziffer genau ist, und vergleichen Sie niemals zwei Gleitkommazahlen auf Gleichheit.
So vergleichen Sie Gleitkommazahlen richtig
1. Verwenden Sie die Rundungsmethode, um zu verarbeiten und dann zu vergleichen
Beispiel:
<?php
$a = 0.1;
$b = 0.9;
$c = 1;
var_dump(($c-$b)==$a); // false
var_dump(round(($c-$b),1)==round($a,1)); // true
?>
2. Verwenden Sie einen hochpräzisen Betrieb Methoden
Verwenden Sie bei der ersten Berechnung hochpräzise Berechnungsmethoden, um sicherzustellen, dass die Genauigkeit nicht verloren geht.
Die hochpräzise Betriebsmethode ist wie folgt:
bcadd
Konvertieren Sie zwei hochpräzise Zahlen Addierenbccomp
Vergleicht zwei hochpräzise Zahlen und gibt -1,0,1 zurück
bcpDividieren Sie zwei hochpräzise Zahlen
bcmodErmitteln Sie den Rest einer hochpräzisen Zahl
bcmulMultiplizieren Sie zwei hochpräzise Zahlen
bcpowErmitteln Sie die Potenz einer hochpräzisen Zahl
bcpowmodErmitteln Sie den Modul der Potenz hochpräziser Zahlen
bcscaleKonfigurieren Sie die Standardanzahl der Dezimalstellen , was äquivalent zu „scale="
bcsqrt Finden Sie die Quadratwurzel einer hochpräzisen Zahl
bcsub Subtrahiere zwei hochpräzise Zahlen
Beispiel:<?php
$a = 0.1;
$b = 0.9;
$c = 1;
var_dump(($c-$b)==$a); // false
var_dump(bcsub($c, $b, 1)==$a); // true
?>
Verwandte Empfehlungen:
Detaillierte Erklärung von JSGleitkommazahlOperationsverarbeitung (grafisches Tutorial)
Javascript-Implementierung zum Finden der Quadratwurzel von
Gleitkommazahlen
Teilen von Beispielen für die Lösung ungenauer
Das obige ist der detaillierte Inhalt vonDetaillierte grafische Erläuterung der PHP-Gleitkommazahlen-Vergleichsmethode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!