Signatur
Beschreibung
gmp_fact() berechnet die Fakultät (n!) der übergebenen nicht-negativen ganzen Zahl. Die Fakultät ist definiert als das Produkt aller positiven ganzen Zahlen von 1 bis n, also n! = 1 × 2 × 3 × … × n, mit dem Sonderfall 0! = 1.
Da PHP-interne Integer-Typen bereits ab relativ kleinen Werten (etwa 20! bei 64-Bit-Systemen) überlaufen, ist gmp_fact() besonders wertvoll: Die GMP-Bibliothek arbeitet mit beliebig großen ganzen Zahlen und ermöglicht es, extrem große Fakultäten exakt zu berechnen – z. B. 1000! oder noch größere Werte.
Der Rückgabewert ist ein GMP-Objekt, das direkt an andere GMP-Funktionen wie gmp_strval(), gmp_mul() oder gmp_div() übergeben werden kann. Seit PHP 5.6 können GMP-Objekte auch direkt in arithmetischen Ausdrücken verwendet werden.
Die Funktion erfordert, dass die GMP-Erweiterung installiert und aktiviert ist. Dies ist auf den meisten Systemen standardmäßig der Fall, kann aber bei speziellen Hosting-Umgebungen fehlen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | int|string|GMP | Die nicht-negative ganze Zahl, deren Fakultät berechnet werden soll. Kann als PHP-int, als numerischer string oder als GMP-Objekt übergeben werden. Negative Werte führen zu einem Fehler. |
Rückgabewert
GMP-Objekt zurück, das das exakte Ergebnis von num! enthält. Das Ergebnis kann mit gmp_strval() in einen String oder mit gmp_intval() (bei kleinen Werten) in einen Integer umgewandelt werden.Beispiele
Einfache Fakultäts-Berechnung und Ausgabe als String
<?php
// 10! berechnen und als String ausgeben
$result = gmp_fact(10);
echo gmp_strval($result); // 3628800
// 20! (überschreitet normalen int-Bereich auf 32-Bit-Systemen)
$big = gmp_fact(20);
echo "\n" . gmp_strval($big); // 2432902008176640000
Sehr große Fakultät berechnen (1000!)
<?php
// Berechnung von 1000! — weit jenseits des PHP-int-Bereichs
$fact1000 = gmp_fact(1000);
$str = gmp_strval($fact1000);
echo "Anzahl der Ziffern von 1000!: " . strlen($str) . PHP_EOL;
echo "Erste 20 Ziffern: " . substr($str, 0, 20) . "..." . PHP_EOL;
Binomialkoeffizient mit gmp_fact berechnen
<?php
// Binomialkoeffizient C(n, k) = n! / (k! * (n-k)!)
function binomial(int $n, int $k): GMP {
$numerator = gmp_fact($n);
$denominator = gmp_mul(gmp_fact($k), gmp_fact($n - $k));
return gmp_div_q($numerator, $denominator);
}
// C(52, 5) — Anzahl möglicher Pokerblätter
$result = binomial(52, 5);
echo gmp_strval($result) . PHP_EOL;
// Wichtig · Fallstricke
Negative Zahlen: Das Übergeben eines negativen Wertes führt zu einem ValueError (ab PHP 8.0) bzw. zu einer PHP-Warnung mit Rückgabe von false in älteren Versionen. Daher sollte die Eingabe immer vorher auf >= 0 geprüft werden.
Performance: Sehr große Fakultäten (z. B. gmp_fact(100000)) können erheblich Rechenzeit und Speicher beanspruchen. Bei solchen Berechnungen sollte auf ausreichende PHP-Ressourcen (memory_limit, max_execution_time) geachtet werden.
Erweiterung: Die GMP-Erweiterung muss aktiviert sein. Prüfbar mit extension_loaded('gmp').