Gleitkommazahlen

Gleitkommazahlen (auch als "floats", "doubles" oder "reelle Zahlen" bezeichnet) können anhand einer der folgenden Schreibweisen bezeichnet werden:

<?php
$a 
1.234;
$b 1.2e3;
$c 7E-10;
$d 1_234.567// von PHP 7.4.0 an
?>

Formell von PHP 7.4.0 an (zuvor waren Unterstriche nicht erlaubt):

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

Die Größe einer Gleitkommazahl ist plattformabhängig, ein Maximalwert von circa 1.8e308 mit einer Präzision von ungefähr 14 Dezimal-Nachkommastellen ist jedoch ein üblicher Wert (64-Bit IEEE-Format).

Warnung

Genauigkeit von Gleitkommazahlen

Gleitkommazahlen haben eine begrenzte Präzision. Obgleich dies vom System abhängig ist, verwendet PHP üblicherweise das IEEE 754 Double Precision Format, welches einen maximalen relativen Rundungsfehler in einer Größenordnung en 1.11e-16 ergibt. Nicht-Elementare arithmetische Operationen können jedoch größere Fehler hervorgerufen und natürlich muss eine Fortpflanzung des Fehlers berücksichtigt werden, wenn mehrere Operationen zusammengesetzt werden.

Außerdem gibt es rationale Zahlen die zur Basis 10 als Gleitkommazahlen exakt dargestellt werden können, beispielsweise 0.1 or 0.7, für die es aber keine exakte Repräsentation als Gleitkommazahlen zur Basis 2 gibt, welche intern aber unabhängig von der Größe der Mantisse verwendet wird. Daher können Sie nicht ohne einen geringen Präzisionsverlust in ihre intern binäre Darstellung umgewandelt werden. Dies kann zu verwirrenden Ergebnissen führen: floor((0.1+0.7)*10) wird üblicherweise 7 ergeben statt des erwarteten Ergebnisses von 8, da die interne Repräsentation etwas ist wie 7.9999999999999991118....

Man sollte sich daher niemals bis zur letzten Nachkommastelle auf Gleitkommazahlen verlassen und Gleitkommazahlen niemals direkt auf Gleichheit prüfen. Wenn eine höhere Präzision notwendig ist, stehen die Mathematikfunktionen mit beliebiger Präzision und die gmp-Funktionen zur Verfügung.

Für eine "einfache" Erklärung, steht der Ratgeber » Floating Point Guide zur Verfügung, welche auch den Titel hat "Why don’t my numbers add up?"

Umwandlung in float

Von Strings

Wenn der String numerisch ist oder numerisch beginnt, wird er in den entsprechenden entsprechenden Gleitkommawert umgewandelt, andernfalls wird er in Null (0) umgewandelt.

Von anderen Typen

Werte aller anderen Typen werden umgewandelt, indem der Wert zuerst in den Typ int umgewandelt wird und dieser anschließend zu float. Weitere Informationen findet man unter Umwandlung in Integer.

Hinweis:

Da bestimmte Typen ein undefiniertes Verhalten bei der Umwandlung in int haben, ist dies auch bei der Umwandlung in float der Fall.

Gleitkommazahlen vergleichen

Wie in der obigen Warnung bereits dargestellt, ist es problematisch Gleitkommazahlen auf Gleichheit zu überprüfen, aufgrund ihrer internen Darstellungsart. Es gibt allerdings Wege, diese Vergleiche von Gleitkommazahlen anzustellen, die diese Beschränkungen umgehen.

Um Gleitkommazahlen auf Gleichheit zu prüfen, wird eine obere Schranke für den Rundungsfehler verwendet. Dieser Wert ist bekannt als Maschinengenauigkeit Epsilon und stellt die kleinste annehmbare Differenz in der Berechnung dar.

$a und $b sind bis auf 5 Nachkommastellen gleich.

<?php
$a 
1.23456789;
$b 1.23456780;
$epsilon 0.00001;

if(
abs($a-$b) < $epsilon) {
    echo 
"true";
}
?>

NaN

Einige numerische Operationen können einen Wert ergeben, der durch die Konstante NAN dargestellt wird. Dieses Ergebnis stellt einen undefinierten oder nicht darstellbaren Wert in den Fließkommaberechnungen dar. Jeder strikte oder nicht strikte Vergleich dieses Werts mit jedem beliebigen anderen Wert, inklusive sich selbst, nur nicht true, wird ein Ergebnis von false hervorbringen.

Da NAN eine beliebige Anzahl von anderen Werten darstellen kann, sollte NAN nicht mit anderen Werten, einschließlich sich selbst, verglichen werden. Stattdessen sollte zur Prüfung is_nan() verwendet werden.

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

Grundlagen von Views in MySQL

Views in einer MySQL-Datenbank bieten die Möglichkeit, eine virtuelle Tabelle basierend auf dem Ergebnis einer SQL-Abfrage zu erstellen. ...

admin

Autor : admin
Kategorie: mySQL-Tutorials

Definition von Stored Procedures - eine Einführung

Stored Procedures sind vordefinierte SQL-Codeblöcke, die in einer Datenbank gespeichert sind und bei Bedarf aufgerufen werden können. ...

Bernie

Autor : ebiz-consult GmbH & Co. KG
Kategorie: mySQL-Tutorials

Wie kann man komplexe Abfragen mit SQL-Querys In MySQLi effektiv durchführen?

In diesem MySQL-Tutorial wird erklärt, wie komplexe SQL-Abfragen in MySQLi effizient durchgeführt werden können. Wir werden uns mit verschiedenen Aspekten der Datenbankabfrage beschäftigen und spezifische Methoden kennenlernen. ...

TheMax

Autor : TheMax
Kategorie: mySQL-Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

Professioneller Webentwickler & Webdesigner

Of course, here is the translation: Hello, Thank you for your interest in the long-term project. Your extensive skills and experience in web dev ...

Geschrieben von Athelstan am 15.04.2024 09:25:39
Forum: Jobgesuche
Wir stellen unsere SEO-Agentur vor

Hallo In der heutigen digitalen Welt war es für Unternehmen noch nie so einfach, ihre Reichweite weltweit zu vergrößern. Wenn Sie außerhalb I ...

Geschrieben von thomasmuller am 14.04.2024 07:18:33
Forum: User stellen sich vor
Spielplan für 4 Gruppen zu je 6 Teams auf 2 Feldern

Hallöchen zusammen, ich versuche derzeit unseren Excel-Spielplan in PHP zu überführen. Eigentlich bin ich auch shon fertig - wenn da nicht dies ...

Geschrieben von derH0st am 11.04.2024 15:58:37
Forum: PHP Developer Forum
PHP 8.3.3 - App kann auf dem PC nicht ausgeführt werden

Problem gelöst. Die php.exe hatte einen defekt. Neue heruntergeladen und fertig.

Geschrieben von Tetra1081 am 10.04.2024 16:49:14
Forum: PHP Developer Forum