Signatur
Beschreibung
is_nan() prüft, ob der übergebene Gleitkommawert dem IEEE-754-Sonderwert NAN (Not a Number) entspricht. Dieser Wert entsteht in PHP zum Beispiel durch mathematisch undefinierte Operationen wie acos(2.0), sqrt(-1) oder log(-1). Ein direkter Vergleich mit NAN per === oder == ist dabei nicht möglich, da NAN !== NAN nach IEEE-754 immer true liefert – genau deshalb wird is_nan() benötigt.
Die Funktion ist besonders nützlich, wenn mathematische Berechnungen validiert werden sollen, bevor deren Ergebnis weiterverwendet wird. Ohne diese Prüfung könnten nachfolgende Berechnungen stille Fehler erzeugen, da sich NAN durch Operationen propagiert.
Verwandte Funktionen sind is_infinite() und is_finite(), die ebenfalls IEEE-754-Sonderwerte (positiv/negativ unendlich) prüfen. Alle drei Funktionen ergänzen sich und decken gemeinsam die vollständige Prüfung des Wertebereichs von Gleitkommazahlen ab.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | float | Die zu prüfende Gleitkommazahl. Wird ein anderer Typ übergeben, konvertiert PHP ihn implizit nach float. |
Rückgabewert
true zurück, wenn num den Wert NAN hat, andernfalls false.Beispiele
Einfaches NAN-Erkennen nach ungültiger Berechnung
<?php
$value = acos(2.0); // Undefiniert: Arkuskosinus außerhalb von [-1, 1]
if (is_nan($value)) {
echo "Das Ergebnis ist NAN – die Eingabe war ungültig.\n";
} else {
echo "Ergebnis: " . $value . "\n";
}
$valid = acos(0.5);
if (is_nan($valid)) {
echo "NAN\n";
} else {
echo "Ergebnis: " . $valid . "\n"; // Gibt einen gültigen Wert aus
}
Warum direkter NAN-Vergleich nicht funktioniert
<?php
$nan = sqrt(-1); // Erzeugt NAN
// FALSCH: Direkter Vergleich funktioniert nicht
var_dump($nan == NAN); // bool(false) — immer false nach IEEE-754!
var_dump($nan === NAN); // bool(false) — ebenfalls immer false!
// RICHTIG: is_nan() verwenden
var_dump(is_nan($nan)); // bool(true)
Eingabe-Validierung bei numerischen Berechnungen
<?php
function berechneWurzel(float $wert): string {
$ergebnis = sqrt($wert);
if (is_nan($ergebnis)) {
return "Fehler: Wurzel aus negativer Zahl ist nicht definiert.";
}
if (is_infinite($ergebnis)) {
return "Fehler: Ergebnis ist unendlich.";
}
return "Ergebnis: " . $ergebnis;
}
echo berechneWurzel(9.0) . "\n";
echo berechneWurzel(-4.0) . "\n";
// Wichtig · Fallstricke
Wichtig: Da NAN nach dem IEEE-754-Standard mit keinem Wert – auch nicht mit sich selbst – gleich ist, führt ein Vergleich wie $x == NAN immer zu false. Die einzige zuverlässige Methode zur Erkennung von NAN ist is_nan().
Die PHP-Konstante NAN ist seit PHP 4.0 verfügbar und liefert den entsprechenden Gleitkommawert; sie sollte jedoch niemals direkt für Vergleiche verwendet werden.
Bei der Übergabe von Integer-Werten erfolgt eine implizite Umwandlung nach float; normale Integer-Werte und auch INF/-INF werden dabei korrekt als Nicht-NAN erkannt.