Signatur
Beschreibung
bcpow() gehört zur BCMath-Erweiterung (Binary Calculator) und ermöglicht die exakte Berechnung von Potenzen beliebig großer oder beliebig genauer Dezimalzahlen, ohne die typischen Rundungsfehler von Fließkommazahlen (float). Basis und Exponent werden als Strings übergeben, das Ergebnis wird ebenfalls als String zurückgegeben.
Der Parameter scale legt fest, wie viele Dezimalstellen im Ergebnis erscheinen sollen. Wird er weggelassen oder auf null gesetzt, greift der globale Standardwert, der zuvor mit bcscale() gesetzt werden kann (ab PHP 8.0 standardmäßig 0, wenn nicht gesetzt).
Typische Einsatzbereiche sind Kryptographie, Finanzberechnungen, wissenschaftliche Rechnungen sowie alle Situationen, in denen exakte Ganzzahl- oder Dezimalarithmetik mit sehr großen Zahlen erforderlich ist – zum Beispiel bei RSA-Schlüsselgenerierung oder bei Zinseszinsberechnungen über viele Dezimalstellen.
Der Exponent muss eine nicht-negative ganze Zahl sein (als String). Negative Exponenten werden seit PHP 7.3 unterstützt; für frühere Versionen führt ein negativer Exponent zu einem Fehler oder zum Rückgabewert "0".
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | string | Die Basis der Potenzrechnung als numerischer String. Kann eine beliebig große Ganzzahl oder eine Dezimalzahl sein. | |
| $exponent Pflicht | string | Der Exponent als numerischer String. Muss eine ganze Zahl sein; negative Werte sind ab PHP 7.3 erlaubt. | |
| $scale | ?int | null | Anzahl der Dezimalstellen im Ergebnis. Bei null wird der globale BCMath-Wert (gesetzt mit bcscale()) verwendet, sonst 0. |
Rückgabewert
"0" zurück, wenn der Exponent negativ ist und scale auf 0 gesetzt ist (PHP < 7.3).Beispiele
Einfache Ganzzahl-Potenz berechnen
<?php
// 2 hoch 10
$result = bcpow('2', '10');
echo $result; // 1024
// Sehr große Basis
$big = bcpow('123456789', '5');
echo $big;
Dezimalzahl mit Genauigkeit berechnen
<?php
// 1.05 hoch 12 (Zinseszins: 5% pro Jahr über 12 Jahre)
$result = bcpow('1.05', '12', 10);
echo $result;
// Zum Vergleich mit Float:
$float = 1.05 ** 12;
echo PHP_EOL . number_format($float, 10);
Großes RSA-artiges Modulo-Beispiel (Basis für Kryptographie)
<?php
// Berechne 2^255 – eine für Kryptographie relevante große Zahl
$result = bcpow('2', '255');
echo strlen($result) . ' Stellen: ' . $result;
// Wichtig · Fallstricke
Negativer Exponent: Ab PHP 7.3 werden negative Exponenten unterstützt; das Ergebnis ist dann ein Dezimalbruch. In älteren PHP-Versionen führte ein negativer Exponent stillschweigend zu "0".
Nicht-ganzzahliger Exponent: Der Exponent wird intern auf eine ganze Zahl gekürzt (Nachkommastellen werden ignoriert). Soll eine Wurzel berechnet werden, ist bcsqrt() oder eine eigene Implementierung notwendig.
Performanz: Bei sehr großen Exponenten (z. B. in der Kryptographie) sollte bcpowmod() verwendet werden, da diese Funktion modular potenziert und dabei wesentlich effizienter ist als bcpow() gefolgt von bcmod().
BCMath-Erweiterung: Die Erweiterung muss in PHP aktiviert sein (ab PHP 7.4 standardmäßig gebündelt, aber nicht immer aktiv). Im Zweifelsfall extension=bcmath in der php.ini prüfen.