Start · Sprachen · PHP · Referenz · fdiv

fdiv

Funktion

Dividiert zwei Gleitkommazahlen gemäß IEEE 754 und gibt bei Division durch null <code>INF</code>, <code>-INF</code> oder <code>NAN</code> zurück, anstatt eine Warnung auszulösen.

seit PHP 8.0.0 Kategorie: math

Signatur

fdiv(float $num1, float $num2): float

Beschreibung

fdiv() führt eine Gleitkomma-Division gemäß dem IEEE 754-Standard durch. Im Gegensatz zum normalen Divisionsoperator / wirft fdiv() keinen Fehler und erzeugt keine Warnung, wenn der Divisor 0.0 ist. Stattdessen wird ein spezieller IEEE-754-Wert zurückgegeben: INF (positiv unendlich), -INF (negativ unendlich) oder NAN (Not a Number).

Diese Funktion ist besonders nützlich in mathematischen Berechnungen, bei denen Division durch null nicht ausgeschlossen werden kann und ein sicherer Umgang mit Sonderfällen ohne aufwendige Vorprüfungen gewünscht ist. Die zurückgegebenen Sonderwerte lassen sich anschließend mit is_nan(), is_infinite() oder is_finite() überprüfen.

Vor PHP 8.0 musste man entweder selbst gegen null prüfen oder @-Fehlerunterdrückung einsetzen, um Warnungen bei Division durch null zu vermeiden. fdiv() schafft hier eine saubere, standardkonforme Alternative. Zu beachten ist, dass sowohl Zähler als auch Nenner als float behandelt werden, sodass Ganzzahlen automatisch konvertiert werden.

Parameter

Name Typ Default Beschreibung
$num1 Pflicht float Der Dividend (Zähler) der Division.
$num2 Pflicht float Der Divisor (Nenner) der Division. Darf 0.0 sein; in diesem Fall wird ein IEEE-754-Sonderwert zurückgegeben.

Rückgabewert

Typ
float
Beschreibung
Gibt das Ergebnis der Division als float zurück. Bei Division durch null: INF wenn num1 > 0, -INF wenn num1 < 0, und NAN wenn num1 === 0.0.

Beispiele

Grundlegende Verwendung von fdiv()

<?php
var_dump(fdiv(10, 2));    // Normale Division
var_dump(fdiv(10, 0));    // Positiv unendlich
var_dump(fdiv(-10, 0));   // Negativ unendlich
var_dump(fdiv(0, 0));     // NAN
var_dump(fdiv(-0.0, 0));  // NAN
float(5) float(INF) float(-INF) float(NAN) float(NAN)

Sicherer Einsatz in einer Berechnung mit Prüfung des Ergebnisses

<?php
function berechneDurchschnitt(float $summe, float $anzahl): string {
    $ergebnis = fdiv($summe, $anzahl);

    if (is_nan($ergebnis)) {
        return 'Ungültig (0 / 0)';
    }
    if (is_infinite($ergebnis)) {
        return 'Unendlich (Division durch null)';
    }
    return 'Durchschnitt: ' . number_format($ergebnis, 2);
}

echo berechneDurchschnitt(150, 5) . PHP_EOL;  // Normal
echo berechneDurchschnitt(100, 0) . PHP_EOL;  // Division durch null
echo berechneDurchschnitt(0, 0)   . PHP_EOL;  // 0 / 0
Durchschnitt: 30.00 Unendlich (Division durch null) Ungültig (0 / 0)

Vergleich mit dem / Operator

<?php
// Normaler Divisionsoperator wirft in PHP 8 einen DivisionByZeroError
try {
    $a = 10 / 0;
} catch (\DivisionByZeroError $e) {
    echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}

// fdiv() hingegen gibt IEEE-754-Sonderwerte zurück
$b = fdiv(10, 0);
var_dump($b); // float(INF) — kein Fehler
Fehler: Division by zero float(INF)

// Wichtig · Fallstricke

Hinweis zu PHP 8.0+: Der /-Operator wirft bei ganzzahliger Division durch null einen DivisionByZeroError. Bei Gleitkomma-Divisionen durch 0.0 liefert / jedoch bereits INF oder NAN ohne Ausnahme — fdiv() vereinheitlicht dieses Verhalten explizit für alle Fälle und macht die Absicht im Code klar lesbar.

Die Funktion konvertiert beide Parameter intern zu float. Achte darauf, dass sehr große oder sehr kleine Zahlen zu Gleitkomma-Genauigkeitsverlusten führen können, was unabhängig von fdiv() selbst ist.