Start · Sprachen · PHP · Referenz · gmp_div_q

gmp_div_q

Funktion

Dividiert zwei GMP-Zahlen ganzzahlig und gibt den Quotienten zurück.

seit PHP 4.0.4 Kategorie: math

Signatur

gmp_div_q(GMP|int|string $num1, GMP|int|string $num2, int $rounding = GMP_ROUND_ZERO): GMP

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

Typ
GMP
Beschreibung
Ein 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
14

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
GMP_ROUND_ZERO: -3 GMP_ROUND_PLUSINF: -3 GMP_ROUND_MINUSINF: -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);
124999998985937500

// 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.