Signatur
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
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
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
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
Fehlerbehandlung bei negativer Eingabe (PHP 8+)
<?php
try {
$result = bcsqrt('-4', 5);
} catch (\ValueError $e) {
echo 'Fehler: ' . $e->getMessage();
}
// 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.