Signatur
Beschreibung
gmp_divexact dividiert die GMP-Zahl num1 durch num2 und gibt das exakte ganzzahlige Ergebnis zurück. Die Funktion setzt voraus, dass num1 vollständig durch num2 teilbar ist, d. h. es darf kein Rest entstehen. Ist dies dennoch der Fall, ist das Ergebnis undefiniert.
Im Gegensatz zu gmp_div_q nutzt gmp_divexact intern einen optimierten Algorithmus der GMP-Bibliothek (exact division), der schneller ist, wenn die Teilbarkeit garantiert werden kann – z. B. nach einer Multiplikation oder beim Rechnen mit Faktoriellen, kombinierten Produkten oder Ergebnissen aus anderen GMP-Operationen.
Die Funktion eignet sich besonders dann, wenn man im Voraus sicher weiß, dass die Division aufgeht – etwa beim Kürzen von Zählern und Nennern, bei der Berechnung von Binomialkoeffizienten oder beim Rückverfolgen von Berechnungsschritten. In diesen Szenarien liefert sie eine bessere Laufzeit als die allgemeine Division.
Alle Parameter können als GMP-Objekt, als PHP-int oder als dezimaler string angegeben werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num1 Pflicht | GMP|int|string | Der Dividend – die Zahl, die dividiert werden soll. Kann als GMP-Objekt, als int oder als numerischer string übergeben werden. |
|
| $num2 Pflicht | GMP|int|string | Der Divisor – die Zahl, durch die dividiert wird. Muss num1 ohne Rest teilen; andernfalls ist das Ergebnis undefiniert. Darf nicht 0 sein. |
Rückgabewert
GMP-Objekt, das das exakte Ergebnis der Division enthält. Da kein Rest erwartet wird, entspricht dieses Ergebnis dem vollständigen Quotienten.Beispiele
Einfache exakte Division
<?php
$a = gmp_init('100');
$b = gmp_init('4');
$result = gmp_divexact($a, $b);
echo gmp_strval($result); // 25
Binomialkoeffizient berechnen (n über k)
<?php
// Berechnet n! / (k! * (n-k)!) mit gmp_divexact
function binomial(int $n, int $k): string {
$numerator = gmp_fact($n);
$denominator = gmp_mul(gmp_fact($k), gmp_fact($n - $k));
// Division geht garantiert exakt auf
$result = gmp_divexact($numerator, $denominator);
return gmp_strval($result);
}
echo binomial(10, 3); // C(10,3) = 120
echo PHP_EOL;
echo binomial(20, 10); // C(20,10) = 184756
Verwendung mit Integer-Werten direkt
<?php
// Direkte Integer-Übergabe ohne gmp_init
$result = gmp_divexact(360, 12);
echo gmp_strval($result);
// Wichtig · Fallstricke
Undefiniertes Verhalten: Wenn num1 nicht exakt durch num2 teilbar ist, liefert gmp_divexact ein falsches, undefiniertes Ergebnis – ohne Fehler oder Warnung. Verwende in solchen Fällen stattdessen gmp_div_q (mit optionalem Rest über gmp_div_r) oder prüfe die Teilbarkeit vorab mit gmp_mod.
Division durch null: Das Übergeben von 0 als Divisor führt zu einem fatalen Fehler (Division by zero).
Die Funktion setzt die PHP-Erweiterung gmp voraus, die auf vielen Systemen separat aktiviert werden muss (extension=gmp in der php.ini).