Heim >Backend-Entwicklung >PHP-Problem >Was ist die Verwendung von Gleitkommazahlen in PHP?

Was ist die Verwendung von Gleitkommazahlen in PHP?

藏色散人
藏色散人Original
2021-12-01 09:20:402141Durchsuche

PHP-Gleitkommazahlen beziehen sich auf den Float-Gleitkommatyp, der durch Syntax wie „$a = 1,234; $b = 1,2e3; $c = 7E-10; $d = 1_234,567;“ definiert werden kann.

Was ist die Verwendung von Gleitkommazahlen in PHP?

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.4, DELL G3-Computer

Was ist die Verwendung von PHP-Gleitkommazahlen?

php Float Float-Typ

Gleitkomma Typ (auch Float-Typ genannt) Punktzahl Float, Double Precision Number Double oder Real Number Real) kann mit einer der folgenden Syntaxen definiert werden:

<?php
$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;
$d = 1_234.567; // 从 PHP 7.4.0 开始支持
?>

Gleitkommazahlen werden in der Form dargestellt (Unterstriche werden vor PHP 7.4 nicht unterstützt). 0):

LNUM          [0-9]+(_[0-9]+)*
DNUM          ([0-9]*(_[0-9]+)*[\.]{LNUM}) | ({LNUM}[\.][0-9]*(_[0-9]+)*)
EXPONENT_DNUM (({LNUM} | {DNUM}) [eE][+-]? {LNUM})

Die Wortlänge von Gleitkommazahlen ist plattformabhängig, obwohl der Maximalwert normalerweise 1,8e308 mit einer Genauigkeit von 14 Dezimalstellen (64-Bit-IEEE-Format) beträgt.

Warnung

Präzision von Gleitkommazahlen

Gleitkommazahlen haben eine begrenzte Genauigkeit. Obwohl es vom System abhängt, verwendet PHP normalerweise das IEEE 754-Doppelformat, sodass der maximale relative Fehler aufgrund der Rundung 1,11e-16 beträgt. Nicht grundlegende mathematische Operationen können zu größeren Fehlern führen, und die Fehlerfortpflanzung bei der Durchführung zusammengesetzter Operationen muss berücksichtigt werden.

Darüber hinaus können rationale Zahlen wie 0,1 oder 0,7, die genau im Dezimalformat dargestellt werden können, unabhängig von der Anzahl der Mantissen, durch die intern verwendete Binärzahl nicht genau dargestellt werden und können daher nicht ohne Verlust in das Binärformat konvertiert werden ein bisschen Präzision. Dies kann zu verwirrenden Ergebnissen führen: Beispielsweise gibt floor((0.1+0.7)*10) normalerweise 7 statt der erwarteten 8 zurück, da die interne Darstellung des Ergebnisses tatsächlich etwa 7.9999999999999991118... ist.

Glauben Sie also niemals, dass das Ergebnis der Gleitkommazahl bis zur letzten Ziffer genau ist, und vergleichen Sie niemals, ob zwei Gleitkommazahlen gleich sind. Wenn Sie wirklich eine höhere Präzision benötigen, sollten Sie mathematische Funktionen mit beliebiger Präzision oder die GMP-Funktion verwenden.

In eine Gleitkommazahl konvertieren

Aus Strings

If the string is numeric or leading numeric then it will resolve to the corresponding float value, otherwise it is converted to zero (0).

Von anderen Typen

Bei anderen Werttypen ist die Situation ähnlich, wenn der Wert zuerst in int und dann in float konvertiert wird. Weitere Informationen finden Sie im Abschnitt „Konvertieren in eine Ganzzahl“.

注意:
As certain types have undefined behavior when converting to int, this is also the case when converting to float.

Vergleich von Gleitkommazahlen

Wie die obige Warnmeldung besagt, ist der Vergleich zweier Gleitkommazahlen auf Gleichheit aufgrund interner Ausdrücke problematisch. Es gibt jedoch Umwege, Gleitkommawerte zu vergleichen.

Um Gleitkommazahlen auf Gleichheit zu testen, verwenden Sie einen minimalen Fehlerwert, der nur geringfügig größer als dieser Wert ist. Dieser Wert, auch Maschinen-Epsilon oder kleinste Ganzzahleinheit genannt, ist der kleinste Differenzwert, der in der Berechnung akzeptiert werden kann.

$a und $b entsprechen einer Genauigkeit von fünf Dezimalstellen.

<?php
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;
if(abs($a-$b) < $epsilon) {
    echo "true";
}
?>

NaN

Bestimmte mathematische Operationen erzeugen ein Ergebnis, das durch die Konstante NAN dargestellt wird. Dieses Ergebnis stellt einen Wert dar, der in der Gleitkommaarithmetik undefiniert oder nicht darstellbar ist. Jeder lockere oder strikte Vergleich dieses Werts mit einem anderen Wert (außer true) führt zu false.

Da NAN einen beliebigen anderen Wert darstellt, sollte NAN nicht mit anderen Werten, einschließlich sich selbst, verglichen und mit is_nan() überprüft werden.

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist die Verwendung von Gleitkommazahlen in PHP?. 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