Signatur
Beschreibung
gmp_div() ist ein direkter Alias der Funktion gmp_div_q() und führt eine ganzzahlige Division zweier beliebig großer Ganzzahlen durch, die als GMP-Objekte, PHP-int- oder numerische string-Werte übergeben werden können. Das Ergebnis ist der Quotient (ohne Rest).
Der optionale Parameter $rounding_mode steuert, wie der Quotient bei negativen Zahlen gerundet wird. Standardmäßig wird gegen null gerundet (GMP_ROUND_ZERO). Alternativ stehen GMP_ROUND_PLUSINF (Runden in Richtung +∞) und GMP_ROUND_MINUSINF (Runden in Richtung −∞) zur Verfügung.
Die Funktion eignet sich immer dann, wenn mit sehr großen Ganzzahlen gearbeitet wird, die den Wertebereich normaler PHP-Integer überschreiten. Die GMP-Erweiterung ermöglicht dabei präzise Berechnungen ohne Genauigkeitsverlust, wie er bei Fließkommazahlen auftreten würde.
Da gmp_div() lediglich ein Alias ist, empfiehlt es sich, direkt gmp_div_q() zu verwenden, um explizit klarzumachen, dass der Quotient (und nicht der Rest) erwünscht ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num1 Pflicht | GMP|int|string | Der Dividend — eine GMP-Zahl, ein PHP-Integer oder ein numerischer String. | |
| $num2 Pflicht | GMP|int|string | Der Divisor — eine GMP-Zahl, ein PHP-Integer oder ein numerischer String. Darf nicht 0 sein. |
|
| $rounding_mode | int | GMP_ROUND_ZERO | Rundungsmodus für den Quotienten: GMP_ROUND_ZERO (gegen null), GMP_ROUND_PLUSINF (Richtung +∞) oder GMP_ROUND_MINUSINF (Richtung −∞). |
Rückgabewert
Beispiele
Einfache ganzzahlige Division großer Zahlen
<?php
// Zwei sehr große Zahlen dividieren
$a = gmp_init('1000000000000000000');
$b = gmp_init('3');
$quotient = gmp_div($a, $b);
echo gmp_strval($quotient); // Rest wird verworfen
Rundungsverhalten bei negativen Zahlen
<?php
// Division mit negativem Dividend
$a = gmp_init(-7);
$b = gmp_init(2);
// Standard: gegen null runden
$q1 = gmp_div($a, $b, GMP_ROUND_ZERO);
echo 'GMP_ROUND_ZERO: ' . gmp_strval($q1) . PHP_EOL;
// Richtung +Unendlich runden
$q2 = gmp_div($a, $b, GMP_ROUND_PLUSINF);
echo 'GMP_ROUND_PLUSINF: ' . gmp_strval($q2) . PHP_EOL;
// Richtung -Unendlich runden
$q3 = gmp_div($a, $b, GMP_ROUND_MINUSINF);
echo 'GMP_ROUND_MINUSINF:' . gmp_strval($q3) . PHP_EOL;
// Wichtig · Fallstricke
Division durch null: Wird 0 als Divisor übergeben, löst PHP einen DivisionByZeroError aus. Der Wert des Divisors sollte daher stets vor dem Aufruf geprüft werden.
Alias-Hinweis: Da gmp_div() lediglich ein Alias von gmp_div_q() ist, sollte für neuen Code bevorzugt gmp_div_q() verwendet werden. Aliase können in zukünftigen PHP-Versionen als veraltet markiert oder entfernt werden.
Zum Abrufen des Rests (Modulo) bieten sich gmp_mod() oder gmp_div_r() an. Wenn sowohl Quotient als auch Rest benötigt werden, ist gmp_div_qr() effizienter als zwei separate Aufrufe.