(PHP 8 >= 8.4.0)
BcMath\Number::powmod — Eleva um número de precisão arbitrária, reduzido por um módulo especificado
$exponent, BcMath\Number|string|int $modulus, ?int $scale = null): BcMath\Number
Usa o método de exponenciação rápida para elevar $this à potência de
exponent em relação ao módulo modulus.
exponentO expoente, com um número inteiro não negativo (a escala precisa ser zero).
modulusO módulo, como um inteiro (a escala precisa ser zero).
scale
A propriedade BcMath\Number::scale especifica explicitamente a escala para os resultados de cálculo.
Se for null, a BcMath\Number::scale do resultado do cálculo será definida automaticamente.
Retorna o resultado como um novo objeto BcMath\Number.
Quando a BcMath\Number::scale do objeto resultante é definida automaticamente,
a BcMath\Number::scale do objeto resultante será sempre 0.
Este método lança uma exceção ValueError nos casos a seguir:
exponent ou modulus é uma string e não
é uma string numérica BCMath bem formadaexponent ou modulus tem uma parte fracionáriaexponent é um valor negativoscale está fora do intervalo válido
Este método lança uma exceção DivisionByZeroError se o valor de modulus
for igual a 0.
Exemplo #1 Exemplo de BcMath\Number::powmod() quando scale não é especificado
<?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),
);
?>O exemplo acima produzirá:
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)
}
Exemplo #2 Exemplo de BcMath\Number::powmod() especificando scale explicitamente
<?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),
);
?>O exemplo acima produzirá:
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)
}