Signatur
Beschreibung
gmp_pow ist Teil der GNU Multiple Precision (GMP) Erweiterung und erlaubt die Potenzierung beliebig großer Ganzzahlen, ohne die üblichen Genauigkeitsgrenzen von PHP-Integers oder Floats zu treffen. Das Ergebnis wird als GMP-Objekt zurückgegeben und kann mit anderen GMP-Funktionen weiterverarbeitet werden.
Die Funktion eignet sich besonders für kryptographische Berechnungen, mathematische Algorithmen (z. B. Primzahltests) oder überall dort, wo sehr große Potenzen exakt und ohne Rundungsfehler berechnet werden müssen. Der Exponent exp muss eine nicht-negative gewöhnliche PHP-Ganzzahl sein; für modulare Potenzierung (z. B. in RSA) steht stattdessen gmp_powm zur Verfügung.
Der Basiswert kann als GMP-Objekt, als gewöhnlicher PHP-Integer oder als numerischer String übergeben werden. Bei negativer Basis und geradem Exponenten ist das Ergebnis positiv, bei ungeradem Exponenten negativ – wie mathematisch erwartet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $base Pflicht | GMP|int|string | Die Basis der Potenz. Kann ein GMP-Objekt, ein PHP-Integer oder ein numerischer String sein. | |
| $exp Pflicht | int | Der Exponent als nicht-negative PHP-Ganzzahl. Negative Werte führen zu einem Fehler. |
Rückgabewert
base ^ exp enthält. Das Ergebnis kann mit gmp_strval oder gmp_intval in einen lesbaren Wert umgewandelt werden.Beispiele
Einfache Potenzierung großer Zahlen
<?php
// 2 hoch 64 — überschreitet den normalen PHP-Integer-Bereich auf 32-Bit-Systemen
$result = gmp_pow(2, 64);
echo gmp_strval($result); // Exakter Wert, kein Float-Rundungsfehler
Potenzierung mit negativer Basis
<?php
// (-3) hoch 5
$base = gmp_init(-3);
$result = gmp_pow($base, 5);
echo gmp_strval($result);
// (-3) hoch 4
$result2 = gmp_pow($base, 4);
echo PHP_EOL . gmp_strval($result2);
Berechnung einer sehr großen Primzahl-Kandidat-Potenz
<?php
// Mersenne-Kandidat: 2^127 - 1 (bekannte Mersenne-Primzahl)
$m = gmp_sub(gmp_pow(2, 127), 1);
echo gmp_strval($m);
// Wichtig · Fallstricke
Kein modulares Rechnen: Für kryptographische Anwendungen, bei denen das Ergebnis modulo einer Zahl berechnet werden soll (z. B. RSA-Verschlüsselung), sollte gmp_powm($base, $exp, $mod) verwendet werden. gmp_powm ist dabei deutlich effizienter als erst gmp_pow und anschließend gmp_mod aufzurufen, da es intern weniger Speicher benötigt.
Negativer Exponent: Ein negativer Wert für exp führt zu einem ValueError (ab PHP 8) bzw. einem Fehler, da GMP nur mit Ganzzahlen arbeitet und ganzzahlige negative Potenzen keine Ganzzahlen ergeben.
GMP-Erweiterung: Die GMP-Erweiterung muss aktiviert sein. Auf vielen Systemen ist sie standardmäßig verfügbar; andernfalls muss PHP mit --with-gmp kompiliert werden.