(PHP 8 >= 8.4.0)
BcMath\Number::powmod — Возводит число произвольной точности в степень и делит результат возведения в степень на модуль числа
$exponent
, BcMath\Number|string|int $modulus
, ?int $scale
= null
): BcMath\Number
Метод возводит значение переменной $this в степень методом быстрого возведения в степень
и возвращает остаток от деления степени числа на модуль числа в аргументе modulus
.
exponent
modulus
scale
scale
явно указывает значение масштаба в результате расчёта.
Со значением null
для параметра scale
метод автоматически установит масштаб в результате расчёта.
Метод возвращает результат в виде нового объекта BcMath\Number.
При автоустановке в объекте с результатом значения свойству BcMath\Number::scale
метод установит свойству значение 0
.
Метод выбрасывает ошибку ValueError в следующих случаях:
exponent
или modulus
передали значение с типом string,
которое сформировали неправильно с точки зрения допустимого формата числовых строк в модуле BCMath.
exponent
или modulus
содержит дробную часть.
exponent
оказалось отрицательным значением.
scale
выходит за пределы допустимого диапазона.
Метод выбрасывает ошибку DivisionByZeroError, если значение аргумента
modulus
равняется 0
.
Пример #1
Пример возведения числа произвольной точности в степень по модулю методом BcMath\Number::powmod()
без указания значения для параметра scale
<?php
var_dump(
new BcMath\Number('8')->powmod(new BcMath\Number('3'), 5),
new BcMath\Number('-8')->powmod(new BcMath\Number('3'), 5),
new BcMath\Number('8')->powmod('2', -3),
new BcMath\Number('-8')->powmod(5, 7),
);
?>
Результат выполнения приведённого примера:
object(BcMath\Number)#3 (2) { ["value"]=> string(1) "2" ["scale"]=> int(0) } object(BcMath\Number)#4 (2) { ["value"]=> string(2) "-2" ["scale"]=> int(0) } object(BcMath\Number)#2 (2) { ["value"]=> string(1) "1" ["scale"]=> int(0) } object(BcMath\Number)#5 (2) { ["value"]=> string(2) "-1" ["scale"]=> int(0) }
Пример #2
Пример возведения числа произвольной точности в степень по модулю методом BcMath\Number::powmod()
с явным значением для параметра scale
<?php
var_dump(
new BcMath\Number('8')->powmod(new BcMath\Number('3'), 5, 1),
new BcMath\Number('-8')->powmod(new BcMath\Number('3'), 5, 2),
new BcMath\Number('8')->powmod('2', -3, 3),
new BcMath\Number('-8')->powmod(5, 7, 4),
);
?>
Результат выполнения приведённого примера:
object(BcMath\Number)#3 (2) { ["value"]=> string(3) "2.0" ["scale"]=> int(1) } object(BcMath\Number)#4 (2) { ["value"]=> string(5) "-2.00" ["scale"]=> int(2) } object(BcMath\Number)#2 (2) { ["value"]=> string(5) "1.000" ["scale"]=> int(3) } object(BcMath\Number)#5 (2) { ["value"]=> string(7) "-1.0000" ["scale"]=> int(4) }