Signatur
Beschreibung
gmp_sqrtrem() berechnet die ganzzahlige Quadratwurzel einer nicht-negativen GMP-Zahl und liefert gleichzeitig den Rest, d. h. die Differenz zwischen der ursprünglichen Zahl und dem Quadrat des Ergebnisses. Das Ergebnis wird als Array zurückgegeben, dessen erstes Element die gerundete Quadratwurzel und dessen zweites Element den Rest enthält.
Die Funktion eignet sich besonders dann, wenn man nicht nur wissen möchte, wie groß die ganzzahlige Wurzel ist, sondern auch, wie weit die ursprüngliche Zahl von einer perfekten Quadratzahl entfernt ist. Ist der Rest gleich 0, handelt es sich bei der Eingabe um eine perfekte Quadratzahl.
Als Eingabe akzeptiert die Funktion GMP-Ressourcen bzw. GMP-Objekte (seit PHP 5.6), aber auch normale PHP-Integer und dezimale Strings, die intern automatisch in GMP-Zahlen umgewandelt werden.
Die Funktion ist Bestandteil der GMP-Erweiterung (GNU Multiple Precision), die für Berechnungen mit beliebig großen ganzen Zahlen genutzt wird. Sie muss in PHP kompiliert oder als Extension aktiviert sein.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | GMP|int|string | Die nicht-negative Zahl, deren ganzzahlige Quadratwurzel berechnet werden soll. Kann ein GMP-Objekt, ein PHP-Integer oder ein dezimaler String sein. |
Rückgabewert
0 enthält die ganzzahlige Quadratwurzel, Index 1 den Rest (d. h. num - wurzel²). Ist der Rest 0, ist die Eingabe eine perfekte Quadratzahl.Beispiele
Ganzzahlige Quadratwurzel mit Rest berechnen
<?php
$zahl = gmp_init(27);
[$wurzel, $rest] = gmp_sqrtrem($zahl);
echo "Zahl: " . gmp_strval($zahl) . PHP_EOL;
echo "Wurzel: " . gmp_strval($wurzel) . PHP_EOL;
echo "Rest: " . gmp_strval($rest) . PHP_EOL;
// 27 = 5² + 2 => Wurzel=5, Rest=2
Prüfen ob eine Zahl eine perfekte Quadratzahl ist
<?php
function istPerfektesQuadrat(int $n): bool {
[, $rest] = gmp_sqrtrem(gmp_init($n));
return gmp_cmp($rest, 0) === 0;
}
$zahlen = [9, 16, 20, 25, 100, 101];
foreach ($zahlen as $z) {
$ergebnis = istPerfektesQuadrat($z) ? 'ja' : 'nein';
echo "$z ist perfektes Quadrat: $ergebnis" . PHP_EOL;
}
Berechnung mit sehr großen Zahlen
<?php
$grosseZahl = gmp_init('99999999999999999999999');
[$wurzel, $rest] = gmp_sqrtrem($grosseZahl);
echo "Wurzel: " . gmp_strval($wurzel) . PHP_EOL;
echo "Rest: " . gmp_strval($rest) . PHP_EOL;
// Wichtig · Fallstricke
Achtung: Negative Zahlen als Eingabe führen zu einem Fehler, da die Quadratwurzel negativer Zahlen im reellen Zahlenraum nicht definiert ist. Stelle sicher, dass der übergebene Wert nicht negativ ist.
Die GMP-Erweiterung muss auf dem Server aktiviert sein. Ohne diese Erweiterung steht gmp_sqrtrem() nicht zur Verfügung. Zur reinen Berechnung der Wurzel ohne Rest kann alternativ gmp_sqrt() verwendet werden.