PHPerKaigi 2025

BcMath\Number::pow

(PHP 8 >= 8.4.0)

BcMath\Number::powВозводит число произвольной точности в степень

Описание

public BcMath\Number::pow(BcMath\Number|string|int $exponent, ?int $scale = null): BcMath\Number

Метод возводит число произвольной точности в значении переменной $this в степень exponent.

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

exponent
Показатель степени. Параметр принимает значения без дробной части. Допустимый диапазон значений показателя степени exponent зависит от платформы, но это как минимум значения от -2_147_483_648 до 2_147_483_647.
scale
Параметр scale явно указывает значение масштаба в результате расчёта. Со значением null для параметра scale метод автоматически установит масштаб в результате расчёта.

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

Метод возвращает результат возведения числа в степень в виде нового объекта BcMath\Number.

При автоустановке в объекте с результатом значения свойству BcMath\Number::scale в зависимости от значения показателя степени exponent значение масштаба BcMath\Number::scale в результате будет следующим:

Значение аргумента exponent Значение свойства BcMath\Number::scale в результате
положительное (масштаб BcMath\Number::scale основания) * (значение показателя степени exponent)
0 0
negative Значение между (масштабом BcMath\Number::scale основания) и (масштабом BcMath\Number::scale основания + 10)

Значение свойства BcMath\Number::scale в объекте с результатом расширяется, если числа невозможно разделить из-за отрицательного значения аргумента exponent. Метод расширяет масштаб только когда требуется и не больше чем на +10 знаков. Поведение этого метода повторяет поведение метода BcMath\Number::div(), описание которого даёт дополнительную информацию.

Ошибки

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

  • В аргументе exponent передали значение с типом string, которое сформировали неправильно с точки зрения допустимого формата числовых строк в модуле BCMath.
  • Значение аргумента exponent содержит дробную часть.
  • Значение показателя степени exponent или масштаба scale выходит за пределы допустимого диапазона.
  • Значение свойства BcMath\Number::scale в объекте с результатом выходит за пределы допустимого диапазона.

Метод выбрасывает ошибку DivisionByZeroError, если значение переменной $this равняется 0, а аргумент показателя степени exponent отрицателен.

Примеры

Пример #1 Пример возведения числа произвольной точности в степень методом BcMath\Number::pow() без указания значения для параметра scale

<?php

$number
= new BcMath\Number('3.0');

$ret1 = $number->pow(new BcMath\Number('5'));
$ret2 = $number->pow('-1');
$ret3 = $number->pow(0);

var_dump($number, $ret1, $ret2, $ret3);

?>

Результат выполнения приведённого примера:

object(BcMath\Number)#1 (2) {
  ["value"]=>
  string(3) "3.0"
  ["scale"]=>
  int(1)
}
object(BcMath\Number)#3 (2) {
  ["value"]=>
  string(9) "243.00000"
  ["scale"]=>
  int(5)
}
object(BcMath\Number)#2 (2) {
  ["value"]=>
  string(13) "0.33333333333"
  ["scale"]=>
  int(11)
}
object(BcMath\Number)#4 (2) {
  ["value"]=>
  string(1) "1"
  ["scale"]=>
  int(0)
}

Пример #2 Пример возведения числа произвольной точности в степень методом BcMath\Number::pow() с явным значением для параметра scale

<?php

$number
= new BcMath\Number('3.0');

$ret1 = $number->pow(new BcMath\Number('5'), 0);
$ret2 = $number->pow('-1', 2);
$ret3 = $number->pow(0, 10);

var_dump($number, $ret1, $ret2, $ret3);

?>

Результат выполнения приведённого примера:

object(BcMath\Number)#1 (2) {
  ["value"]=>
  string(3) "3.0"
  ["scale"]=>
  int(1)
}
object(BcMath\Number)#3 (2) {
  ["value"]=>
  string(3) "243"
  ["scale"]=>
  int(0)
}
object(BcMath\Number)#2 (2) {
  ["value"]=>
  string(4) "0.33"
  ["scale"]=>
  int(2)
}
object(BcMath\Number)#4 (2) {
  ["value"]=>
  string(12) "1.0000000000"
  ["scale"]=>
  int(10)
}

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

  • bcpow() - Возводит в степень число произвольной точности
  • BcMath\Number::powmod() - Возводит число произвольной точности в степень и делит результат возведения в степень на модуль числа
  • BcMath\Number::mul() - Умножает число произвольной точности
  • BcMath\Number::sqrt() - Извлекает квадратный корень из числа произвольной точности
  • BcMath\Number::div() - Делит числа произвольной точности
Добавить

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

Пользователи ещё не добавляли примечания для страницы
To Top