Возводит число произвольной точности в степень и делит результат возведения в степень на модуль числа

# BcMath\Number::powmod

(PHP 8 >= 8.4.0)

BcMath\Number::powmod — Возводит число произвольной точности в степень и делит результат возведения в степень на модуль числа

### Описание

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

Метод возводит значение переменной $this в степень методом быстрого возведения в степень и возвращает остаток от деления степени числа на модуль числа в аргументе `modulus`.

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

`exponent`
  Показатель степени в виде строки с неотрицательным целым числом, без дробной части.
`modulus`
  Неполное кратное в виде строки с целым числом, без дробной части.
`scale`
  Свойство BcMath\Number::scale явно указывает значение масштаба в результате расчёта. Со значением `null` для свойства BcMath\Number::scale метод автоматически установит масштаб в результате расчёта.

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

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

При автоустановке в объекте с результатом значения свойству BcMath\Number::scale метод установит свойству значение `0`.

### Ошибки

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

- В аргументе `exponent` или `modulus` передали значение с типом string, которое сформировали неправильно с точки зрения допустимого формата числовых строк в модуле BCMath.
- Значение переменной $this, аргумента `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)
    }

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

- bcpowmod() - Возводит число произвольной точности в степень и делит результат возведения в степень на модуль числа
- BcMath\Number::pow() - Возводит число произвольной точности в степень
- BcMath\Number::mod() - Получает остаток от деления числа произвольной точности

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open