Start · Sprachen · PHP · Referenz · bcsqrt

bcsqrt

Funktion

Berechnet die Quadratwurzel einer Zahl beliebiger Genauigkeit als Zeichenkette mit der angegebenen Dezimalstellenanzahl.

seit PHP 4.0.0 Kategorie: math

Signatur

bcsqrt(string $num, ?int $scale = null): string

Beschreibung

bcsqrt gehört zur BCMath-Erweiterung (Binary Calculator) und berechnet die Quadratwurzel eines Zahlenstrings mit beliebig hoher Genauigkeit. Im Gegensatz zu sqrt, das mit Gleitkommazahlen arbeitet und daher Rundungsfehler produziert, liefert bcsqrt ein exaktes Ergebnis bis zur gewünschten Anzahl von Nachkommastellen.

Der Parameter scale legt fest, wie viele Dezimalstellen das Ergebnis enthalten soll. Wird er weggelassen oder auf null gesetzt, gilt der global gesetzte Standardwert aus bcscale(). Ist auch dieser nicht gesetzt, wird 0 verwendet (ganzzahliges Ergebnis).

Die Funktion ist besonders nützlich bei finanzmathematischen Berechnungen, kryptografischen Anwendungen oder überall dort, wo Präzision wichtiger ist als Geschwindigkeit. Typische Anwendungsfälle sind Berechnungen mit sehr großen Zahlen oder Situationen, in denen Float-Ungenauigkeiten unakzeptabel sind.

Übergeben werden Zahlen als Strings (z. B. '2', '144.00'). Negative Eingaben sind ungültig und führen zu einem Fehler.

Parameter

Name Typ Default Beschreibung
$num Pflicht string Die nicht-negative Zahl, deren Quadratwurzel berechnet werden soll. Wird als Zeichenkette übergeben, z. B. '2' oder '12345678901234567890'.
$scale ?int null Anzahl der Dezimalstellen im Ergebnis. Bei null wird der globale BCMath-Standardwert (gesetzt via bcscale()) verwendet, sonst 0.

Rückgabewert

Typ
string
Beschreibung
Die Quadratwurzel von num als Zeichenkette mit der angegebenen Anzahl an Dezimalstellen. Bei negativem num wird seit PHP 8.0 ein ValueError geworfen; in älteren Versionen gibt die Funktion null zurück.

Beispiele

Einfache Quadratwurzel mit Dezimalstellen

<?php
// Quadratwurzel von 2 auf 20 Dezimalstellen
$result = bcsqrt('2', 20);
echo $result;
// Ausgabe: 1.41421356237309504880
1.41421356237309504880

Quadratwurzel einer sehr großen Zahl

<?php
// Quadratwurzel einer sehr großen Zahl ohne Float-Verluste
$bigNumber = '123456789012345678901234567890';
$result = bcsqrt($bigNumber, 10);
echo $result;
// Ausgabe: 11111111106.1111111057
11111111106.1111111057

Globalen Scale-Wert setzen und nutzen

<?php
// Globalen Standardwert für Dezimalstellen setzen
bcscale(8);

$sqrt144 = bcsqrt('144');
echo $sqrt144 . PHP_EOL; // 12.00000000

$sqrt2 = bcsqrt('2');
echo $sqrt2 . PHP_EOL;   // 1.41421356
12.00000000 1.41421356

Fehlerbehandlung bei negativer Eingabe (PHP 8+)

<?php
try {
    $result = bcsqrt('-4', 5);
} catch (\ValueError $e) {
    echo 'Fehler: ' . $e->getMessage();
}
Fehler: bcsqrt(): Argument #1 ($num) must be greater than or equal to 0

// Wichtig · Fallstricke

Negative Eingaben: Seit PHP 8.0 wird bei negativem num ein ValueError ausgelöst. In PHP 7 und älter gab die Funktion stillschweigend null zurück, was schwer zu debuggen war. Eigene Validierung wird daher empfohlen, wenn Code auf verschiedenen PHP-Versionen läuft.

Performance: BCMath-Funktionen sind deutlich langsamer als native Float-Operationen. Für rechenintensive Schleifen sollte abgewogen werden, ob die höhere Präzision tatsächlich benötigt wird.

Eingabeformat: num sollte ein gültiger numerischer String sein. Führende und nachfolgende Leerzeichen werden in aktuellen Versionen toleriert, sollten aber vermieden werden, da das Verhalten je nach PHP-Version unterschiedlich sein kann.