(PHP 4, PHP 5, PHP 7, PHP 8)
bcpow — Возводит в степень число произвольной точности
Функция возводит число num в степень
exponent.
numОснование в виде строки.
exponent
Показатель степени без дробной части, в виде строки.
Допустимый диапазон показателя степени зависит от платформы, но лежит
по крайней мере в пределах значений -2147483648 и 2147483647.
scalenull , то по умолчанию будет установлен масштаб по умолчанию,
заданный с помощью функции 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" ?>
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 <?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));
}
?>