Signatur
Beschreibung
gmp_div_q führt eine ganzzahlige Division zweier beliebig großer Zahlen durch und gibt den Quotienten (ohne Rest) als GMP-Objekt zurück. Die Funktion ist Teil der GMP-Erweiterung (GNU Multiple Precision), die Berechnungen mit beliebig großen Ganzzahlen ermöglicht, die den Wertebereich nativer PHP-Integer weit übersteigen.
Das Rundungsverhalten des Quotienten bei negativen Zahlen lässt sich über den dritten Parameter steuern. Zur Auswahl stehen GMP_ROUND_ZERO (Abschneiden in Richtung null, Standard), GMP_ROUND_PLUSINF (Aufrunden in Richtung positiv unendlich) und GMP_ROUND_MINUSINF (Abrunden in Richtung negativ unendlich).
Soll gleichzeitig Quotient und Rest benötigt werden, empfiehlt sich gmp_div_qr. Für den Rest allein steht gmp_div_r bereit. Bei einer Division durch null wird ein Fehler ausgelöst.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num1 Pflicht | GMP|int|string | Der Dividend. Kann ein GMP-Objekt, ein PHP-Integer oder ein numerischer String sein. |
|
| $num2 Pflicht | GMP|int|string | Der Divisor. Darf nicht null sein, da sonst ein Fehler ausgelöst wird. Akzeptiert GMP-Objekt, Integer oder numerischen String. |
|
| $rounding | int | GMP_ROUND_ZERO | Rundungsmodus: GMP_ROUND_ZERO (Richtung null, Standard), GMP_ROUND_PLUSINF (Richtung +∞) oder GMP_ROUND_MINUSINF (Richtung −∞). |
Rückgabewert
GMP-Objekt, das den ganzzahligen Quotienten der Division darstellt.Beispiele
Einfache ganzzahlige Division
<?php
$a = gmp_init('100');
$b = gmp_init('7');
$quotient = gmp_div_q($a, $b);
echo gmp_strval($quotient); // 14, da 7 * 14 = 98, Rest 2
Division mit negativen Zahlen und verschiedenen Rundungsmodi
<?php
// -7 / 2 = -3.5
$a = gmp_init('-7');
$b = gmp_init('2');
// Standard: Richtung null (truncate)
$q1 = gmp_div_q($a, $b, GMP_ROUND_ZERO);
echo 'GMP_ROUND_ZERO: ' . gmp_strval($q1) . PHP_EOL; // -3
// Richtung positiv unendlich
$q2 = gmp_div_q($a, $b, GMP_ROUND_PLUSINF);
echo 'GMP_ROUND_PLUSINF: ' . gmp_strval($q2) . PHP_EOL; // -3
// Richtung negativ unendlich
$q3 = gmp_div_q($a, $b, GMP_ROUND_MINUSINF);
echo 'GMP_ROUND_MINUSINF: ' . gmp_strval($q3) . PHP_EOL; // -4
Verarbeitung sehr großer Zahlen
<?php
// Sehr große Zahlen, die nativen PHP-Integer-Bereich sprengen
$dividend = gmp_init('123456789012345678901234567890');
$divisor = gmp_init('987654321');
$result = gmp_div_q($dividend, $divisor);
echo gmp_strval($result);
// Wichtig · Fallstricke
Division durch null: Wird 0 als Divisor übergeben, wirft PHP einen DivisionByZeroError (bzw. einen fatalen Fehler in älteren Versionen). Validiere den Divisor stets vor dem Aufruf.
Die Funktion gmp_div_q ist ein Alias für gmp_div — beide sind vollständig äquivalent. Für Quotient und Rest in einem Schritt bietet sich gmp_div_qr an, was zwei separate Aufrufe vermeidet und effizienter ist.