bcpow

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

bcpow Возводит в степень число произвольной точности

Описание

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

Функция возводит число num в степень exponent.

Список параметров

num

Основание в виде строки.

exponent

Показатель степени без дробной части, в виде строки. Допустимый диапазон показателя степени зависит от платформы, но лежит по крайней мере в пределах значений -2147483648 и 2147483647.

scale
Параметр используется для установки количества цифр после десятичного знака в результате. Если установлено значение null, то по умолчанию будет установлен масштаб по умолчанию, заданный с помощью функции bcscale() или значение INI-директивы bcmath.scale.

Возвращаемые значения

Функция возвращает результат в виде строки.

Ошибки

Функция выбрасывает ошибку ValueError в следующих случаях:

  • Значение аргумента num или exponent оказалось строкой, которую сформировали неправильно с точки зрения допустимого формата числовых строк в модуле BCMath
  • Показатель степени exponent содержит дробную часть
  • Значение аргумента exponent или scale выходит за пределы допустимого диапазона

Функция теперь выбрасывает исключение DivisionByZeroError, если число num равно 0, а показатель степени exponent оказался отрицательным значением.

Список изменений

Версия Описание
8.4.0 Раньше при возведении нуля в отрицательную степень возвращалось значение 0, теперь выбрасывают исключение DivisionByZeroError.
8.0.0 Функция теперь не усекает показатель степени, а выбрасывает исключение ValueError, когда показатель степени exponent содержит дробную часть.
7.3.0 Функция bcpow() теперь возвращает числа с заданной точностью. Раньше нули в конце дробной части числа отбрасывались.

Примеры

Пример #1 Пример возведения числа произвольной точности в степень произвольной точности функцией bcpow()

<?php

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

?>

Примечания

Замечание:

До PHP 7.3.0 функция bcpow() иногда возвращала результат с меньшим количеством цифр после десятичной точки, чем указали в аргументе scale. Функция усекала дробную часть, только когда результат не требовал всей точности, которую разрешал параметр scale. Например:

Пример #2 Пример усечения точности функцией bcpow()

<?php

echo bcpow('5', '2', 2); // Выдаст "25", а не "25.00"

?>

Смотрите также

  • bcpowmod() - Возводит число произвольной точности в степень и делит результат возведения в степень на модуль числа
  • bcsqrt() - Извлекает квадратный корень из числа произвольной точности
  • BcMath\Number::pow() - Возводит число произвольной точности в степень

Добавить

Примечания пользователей 3 notes

up
-1
thomas at tgohome dot com
16 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
-2
Anonymous
20 years ago
Well, if bcpow has limits, then this should work:<?phpfunction 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.
up
-2
Michael Bailey (jinxidoru at byu dot net)
21 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 Baileyhttp://www.jinxidoru.com
To Top