PHP Conference Kansai 2025

BcMath\Number::powmod

(PHP 8 >= 8.4.0)

BcMath\Number::powmodEleva un número de precisión arbitraria, reducido por un módulo especificado

Descripción

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

Utiliza el método rápido de exponentiación para elevar $this a la potencia exponent en relación con el módulo modulus.

Parámetros

exponent
El exponente, como no negativo e integral (es decir, la escala debe ser cero).
modulus
El módulo, como integral (es decir, la escala debe ser cero).
scale
BcMath\Number::scale especificado explícitamente para los resultados del cálculo. Si null, el BcMath\Number::scale del resultado del cálculo será definido automáticamente.

Valores devueltos

Devuelve el resultado en forma de un nuevo objeto BcMath\Number.

Cuando la propiedad BcMath\Number::scale del resultado se establece automáticamente, se utiliza la mayor BcMath\Number::scale de los tres números utilizados para la operación de módulo.

Errores/Excepciones

Este método lanza una ValueError en los siguientes casos:

  • exponent o modulus es un string y no es una cadena numérica BCMath bien formada
  • $this, exponent o modulus tiene una parte fraccionaria
  • exponent es un valor negativo
  • scale está fuera del rango válido

Este método lanza una excepción DivisionByZeroError si modulus es 0.

Ejemplos

Ejemplo #1 Ejemplo de BcMath\Number::powmod() cuando scale no está 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),
);
?>

El resultado del ejemplo sería:

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)
}

Ejemplo #2 Ejemplo de BcMath\Number::powmod() especificando scale explícitamente

<?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),
);
?>

El resultado del ejemplo sería:

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)
}

Ver también

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top