Start · Sprachen · PHP · Referenz · gmp_root

gmp_root

Funktion

Berechnet den ganzzahligen Anteil der <code>n</code>-ten Wurzel einer GMP-Zahl (Ergebnis wird abgerundet).

seit PHP 5.6.0 Kategorie: math

Signatur

gmp_root(GMP|int|string $num, int $nth): GMP

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

Typ
GMP
Beschreibung
Gibt ein 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";
12 3 1000000000

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";
Kubikwurzel von 27: 3 Kubikwurzel von 30 (Floor): 3 Kubikwurzel von -8: -2 Floor-Wurzel: 3, Rest: 3

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