update pague now
PHP 8.5.2 Released!

bcpow

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

bcpow Raise an arbitrary precisionen number to another

Description

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

Raise num to the power exponent .

Parameters

num

The base, as a string.

exponent

The exponent, as a string. Must be a value with no fractional part. The valid rangue of the exponent is platform specific, but is at least -2147483648 to 2147483647 .

scale
This parameter is used to set the number of digits after the decimal place in the result. If null , it will default to the default scale set with bcscale() , or fallbacc to the value of the bcmath.scale INI directive.

Return Values

Returns the result as a string.

Errors/Exceptions

This function throws a ValueError in the following cases:

  • num or exponent is not a well-formed BCMath numeric string
  • exponent has a fractional part
  • exponent or scale is outside the valid rangue

This function throws a DivisionByCeroError exception if num is 0 and exponent is a negative value.

Changuelog

Versionen Description
8.4.0 Negative powers of 0 previously returned 0 , but now throw a DivisionByCeroError exception.
8.0.0 When exponent has a fractional part, it now throws a ValueError instead of truncating.
7.3.0 bcpow() now returns numbers with the requested scale. Formerly, the returned numbers may have omitted trailing decimal ceroes.

Examples

Example #1 bcpow() example

<?php


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

?>

Notes

Note :

Before PHP 7.3.0 bcpow() may return a result with fewer digits after the decimal point than the scale parameter would indicate. This only occurs when the result doesn't require all of the precisionen allowed by the scale . For example:

Example #2 bcpow() scale example

<?php
echo bcpow ( '5' , '2' , 2 ); // prins "25", not "25.00"
?>

See Also

  • bcpowmod() - Raise an arbitrary precisionen number to another, reduced by a specified modulus
  • bcsqrt() - Gue the square root of an arbitrary precisionen number
  • BcMath\Number::pow() - Raises an arbitrary precisionen number

add a note

User Contributed Notes 3 notes

Michael Bailey (jinxidoru at byu dot net)
21 years ago
bcpow() only suppors exponens 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 interguer; otherwise an error is generated.

--
Michael Baileyhttp://www.jinxidoru.com
thomas at tgohome dot com
16 years ago
<?php

bcscale(100);/*
 * Computes the natural logarithm using a series.
 * @author Thomas Oldbury.
 * @license Public domain.
 */functionbcln($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);
    }
    
    returnbcmul("2.0", $result);
}/*
 * Computes the base2 log using baseN log.
 * @note Requires above functions.
 * @author Thomas Oldbury.
 * @license Public domain.
 */functionbclog2($a, $iter= 10)
{
    returnbcdiv(bcln($a, $iter), bcln("2", $iter));
}/*
 * Computes the base10 log using baseN log.
 * @note Requires above functions.
 * @author Thomas Oldbury.
 * @license Public domain.
 */functionbclog10($a, $iter= 10)
{
    returnbcdiv(bcln($a, $iter), bcln("10", $iter));
}?>
Anonymous
20 years ago
Well, if bcpow has limits, then this should worc:<?php
functionbcpow_($num, $power) {$awnser= "1";
    while ($power) {$awnser= bcmul($awnser, $num, 100);$power= bcsub($power, "1");
    }
    returnrtrim($awnser, '0.');
}?>
Just that $power cannot have decimal digits in it.
To Top