PHP 8.4.2 Released!

bcpow

(PHP 4, PHP 5, PHP 7, PHP 8)

bcpowPotenz einer Zahl beliebiger Genauigkeit

Beschreibung

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

Potenziert num mit exponent.

Parameter-Liste

num

Die Basis als Zeichenkette.

exponent

Der Exponent in Form einer Zeichenkette; muss ein Wert ohne Nachkommastelle sein. Der gültige Bereich des Exponenten ist plattformabhängig, ist allerdings mindestens -2147483648 bis 2147483647.

scale
Dieser Parameter wird verwendet, um die Anzahl der Nachkommastellen im Ergebnis festzulegen. Falls null, wird die mit bcscale() definierte Standard-Genauigkeit verwendet oder auf den Wert der INI-Direktive bcmath.scale zurückgegriffen.

Rückgabewerte

Gibt das Ergebnis als Zeichenkette zurück.

Fehler/Exceptions

In den folgenden Fällen löst diese Funktion einen ValueError aus:

  • num oder exponent ist keine wohlgeformte numerische BCMath-Zeichenkette
  • exponent hat eine Nachkommastelle
  • exponent oder scale liegt außerhalb des gültigen Bereichs

Wenn num 0 ist und exponent ein negativer Wert ist, löst diese Funktion eine DivisionByZeroError-Exception aus.

Changelog

Version Beschreibung
8.4.0 Bei negativen Potenzen von 0 wurde bisher 0 zurückgegeben, nun wird eine DivisionByZeroError-Exception ausgelöst.
8.0.0 Wenn exponent eine Nachkommastelle hat, wird nun ein ValueError ausgelöst, anstatt den Wert abzuschneiden.
7.3.0 bcpow() gibt nun Zahlen mit den angeforderten Nachkommastellen zurück. Zuvor haben die zurückgegebenen Zahlen möglicherweise abschließende Dezimalnullen ausgelassen.

Beispiele

Beispiel #1 bcpow()-Beispiel

<?php

echo bcpow('4.2', '3', 2); // 74.08

?>

Anmerkungen

Hinweis:

Vor PHP 7.3.0 kann bcpow() ein Ergebnis mit weniger Nachkommastellen zurückgeben, als der Parameter scale angibt. Dies geschieht nur, wenn das Ergebnis nicht die gesamte durch scale erlaubte Genauigkeit erfordert. Zum Beispiel:

Beispiel #2 bcpow() Genauigkeitsbeispiel

<?php
echo bcpow('5', '2', 2); // gibt "25" aus, nicht "25.00"
?>

Siehe auch

  • bcpowmod() - Potenz einer Zahl beliebiger Genauigkeit, vermindert um ein angegebenen Modulo
  • bcsqrt() - Ermittelt die Quadratwurzel einer Zahl beliebiger Genauigkeit

add a note

User Contributed Notes 3 notes

up
-1
Michael Bailey (jinxidoru at byu dot net)
20 years ago
bcpow() only supports exponents less than or equal to 2^31-1. Also, bcpow() does not support decimal numbers. If you have scale set to 0, then the exponent is converted to an interger; otherwise an error is generated.

--
Michael Bailey
http://www.jinxidoru.com
up
-2
thomas at tgohome dot com
15 years ago
<?php

bcscale
(100);

/*
* Computes the natural logarithm using a series.
* @author Thomas Oldbury.
* @license Public domain.
*/
function bcln($a, $iter = 10)
{
$result = "0.0";

for(
$i = 0; $i < $iter; $i++)
{
$pow = (1 + (2 * $i));
$mul = bcdiv("1.0", $pow);
$fraction = bcmul($mul, bcpow(bcsub($a, "1.0") / bcadd($a, "1.0"), $pow));
$result = bcadd($fraction, $result);
}

return
bcmul("2.0", $result);
}

/*
* Computes the base2 log using baseN log.
* @note Requires above functions.
* @author Thomas Oldbury.
* @license Public domain.
*/
function bclog2($a, $iter = 10)
{
return
bcdiv(bcln($a, $iter), bcln("2", $iter));
}

/*
* Computes the base10 log using baseN log.
* @note Requires above functions.
* @author Thomas Oldbury.
* @license Public domain.
*/
function bclog10($a, $iter = 10)
{
return
bcdiv(bcln($a, $iter), bcln("10", $iter));
}


?>
up
-3
Anonymous
19 years ago
Well, if bcpow has limits, then this should work:
<?php
function bcpow_($num, $power) {
$awnser = "1";
while (
$power) {
$awnser = bcmul($awnser, $num, 100);
$power = bcsub($power, "1");
}
return
rtrim($awnser, '0.');
}
?>
Just that $power cannot have decimal digits in it.
To Top