Start · Sprachen · PHP · Referenz · gmp_pow

gmp_pow

Funktion

Berechnet die Potenz einer beliebig großen Zahl (<code>base ^ exp</code>) und gibt das Ergebnis als GMP-Objekt zurück.

seit PHP 4.0.4 Kategorie: math

Signatur

gmp_pow(GMP|int|string $base, int $exp): GMP

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

Typ
GMP
Beschreibung
Gibt ein GMP-Objekt zurück, das das Ergebnis der Potenzierung 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
18446744073709551616

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);
-243 81

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);
170141183460469231731687303715884105727

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