PHP 8.4.2 Released!

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() - Извлекает квадратный корень из числа произвольной точности

Добавить

Примечания пользователей 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