PHP 8.6.0 Beta 1 is available for testing

bcpow

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

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

Описание

function 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
Michael Bailey (jinxidoru at byu dot net)
22 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
17 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
21 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.
+Добавить

AltStyle によって変換されたページ (->オリジナル) /