Start · Sprachen · PHP · Referenz · bcpow

bcpow

Funktion

Berechnet die Potenz einer Zahl beliebiger Genauigkeit (<code>num ^ exponent</code>) mithilfe der BCMath-Bibliothek.

seit PHP 4.0.0 Kategorie: math

Signatur

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

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

Typ
string
Beschreibung
Das Ergebnis der Potenzrechnung als String mit der angegebenen Anzahl an Dezimalstellen. Gibt "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;
1024 28679718602997181072337812380892208898401

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);
1.7958563260 1.7958563260

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;
78 Stellen: 57896044618658097711785492504343953926634992332820282019728792003956564819968

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