Signatur
Beschreibung
gmp_root() berechnet die n-te Wurzel einer beliebig großen ganzen Zahl und gibt den ganzzahligen Anteil des Ergebnisses (Floor-Wurzel) als GMP-Objekt zurück. Das bedeutet, dass Nachkommastellen abgeschnitten werden – es wird nicht gerundet.
Die Funktion ist nützlich, wenn mit sehr großen Zahlen gearbeitet wird, für die Standard-PHP-Typen (int, float) nicht ausreichen. Typische Anwendungsfälle sind Kryptographie, zahlentheoretische Berechnungen und Algorithmen, die exakte Ganzzahl-Wurzeln benötigen (z. B. Primzahltests oder Faktorisierung).
Das erste Argument num muss eine nicht-negative Zahl sein, wenn nth gerade ist. Für ungerade Wurzeln (z. B. Kubikwurzel) sind auch negative Werte erlaubt. Der Parameter nth muss eine positive ganze Zahl größer als 0 sein.
Verwandte Funktion: gmp_rootrem() liefert zusätzlich den Rest der Wurzelberechnung, was nützlich ist, wenn man prüfen möchte, ob das Ergebnis exakt ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | GMP|int|string | Die Zahl, aus der die Wurzel gezogen werden soll. Kann ein GMP-Objekt, eine PHP-Ganzzahl oder eine numerische Zeichenkette sein. Bei geraden Wurzeln muss der Wert nicht-negativ sein. |
|
| $nth Pflicht | int | Der Grad der Wurzel (z. B. 2 für Quadratwurzel, 3 für Kubikwurzel). Muss eine positive ganze Zahl größer als 0 sein. |
Rückgabewert
GMP-Objekt zurück, das den ganzzahligen Anteil (abgerundet) der nth-ten Wurzel von num enthält.Beispiele
Ganzzahlige Quadratwurzel einer großen Zahl
<?php
// Quadratwurzel von 144 (exakt)
$result = gmp_root(144, 2);
echo gmp_strval($result) . "\n";
// Quadratwurzel von 10 (nicht exakt, wird abgeschnitten)
$result2 = gmp_root(10, 2);
echo gmp_strval($result2) . "\n";
// Sehr große Zahl
$big = gmp_init('1000000000000000000'); // 10^18
$root = gmp_root($big, 2);
echo gmp_strval($root) . "\n";
Kubikwurzel und Prüfung auf Exaktheit mit gmp_rootrem
<?php
// Kubikwurzel von 27 (exakt)
$result = gmp_root(27, 3);
echo "Kubikwurzel von 27: " . gmp_strval($result) . "\n";
// Kubikwurzel von 30 (nicht exakt)
$result2 = gmp_root(30, 3);
echo "Kubikwurzel von 30 (Floor): " . gmp_strval($result2) . "\n";
// Negative Zahl: Kubikwurzel (ungerade Wurzel erlaubt)
$result3 = gmp_root(-8, 3);
echo "Kubikwurzel von -8: " . gmp_strval($result3) . "\n";
// Mit gmp_rootrem: Ergebnis + Rest
list($root, $rem) = gmp_rootrem(30, 3);
echo "Floor-Wurzel: " . gmp_strval($root) . ", Rest: " . gmp_strval($rem) . "\n";
// Wichtig · Fallstricke
Voraussetzung: Die GMP-Erweiterung muss installiert und aktiviert sein (ext-gmp). Unter Linux ist sie meist über das Paket php-gmp verfügbar.
Achtung: Bei geraden Wurzeln (z. B. Quadratwurzel) wirft die Funktion einen ValueError (PHP 8) bzw. erzeugt einen Fehler, wenn num negativ ist, da das mathematisch nicht definiert ist.
Der Parameter nth muss strikt positiv und ganzzahlig sein – ein Wert von 0 oder ein negativer Wert führt zu einem Fehler.
Für einfache Präzisionsrechnungen mit float-Genauigkeit kann alternativ sqrt() oder pow() verwendet werden. gmp_root() ist speziell für exakte Ganzzahl-Arithmetik mit beliebig großen Zahlen gedacht.