PHPerKaigi 2025

bcpowmod

(PHP 5, PHP 7, PHP 8)

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

Описание

bcpowmod(
    string $num,
    string $exponent,
    string $modulus,
    ?int $scale = null
): string

Функция возводит число num в степень exponent методом быстрого возведения в степень и возвращает остаток от деления степени числа на модуль числа в аргументе modulus.

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

num

Основание степени в виде строки с целым числом, без дробной части.

exponent

Показатель степени в виде строки с неотрицательным целым числом, без дробной части.

modulus

Неполное кратное в виде строки с целым числом, без дробной части.

scale
Параметр устанавливает количество знаков после десятичного разделителя, которое вернётся в результате. При значении null количество знаков после десятичного разделителя равняется значению по умолчанию, которое установили для параметра глобально функцией bcscale(), или резервному значению, которое указали в INI-директиве bcmath.scale, если глобальное значение не установили.

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

Функция возвращает результат в виде строки.

Ошибки

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

  • Значение аргумента num, exponent или modulus оказалось строкой, которую сформировали неправильно с точки зрения допустимого формата числовых строк в модуле BCMath.
  • Значение аргумента num, exponent или modulus содержит дробную часть.
  • В аргументе exponent передали отрицательное значение.
  • Значение аргумента scale выходит за пределы допустимого диапазона.

Функция выбрасывает ошибку DivisionByZeroError, если значение аргумента modulus равняется 0.

Список изменений

Версия Описание
8.0.0 Параметр scale теперь принимает значение null.
8.0.0 Функция теперь выбрасывает ошибку ValueError вместо возврата значения false, если показатель степени exponent оказался отрицательным значением.
8.0.0 Деление на 0 теперь выбрасывает ошибку DivisionByZeroError вместо возврата значения false.

Примеры

Следующие выражения дают одинаковый результат. Однако функция bcpowmod() работает быстрее и принимает бо́льшие значения аргументов.

<?php

$a
= bcpowmod($x, $y, $mod);

$b = bcmod(bcpow($x, $y), $mod);

// $a == $b

?>

Примечания

Замечание:

Поскольку функция выполняет операцию взятия остатка, отрицательные числа иногда дают неожиданные результаты.

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

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

Добавить

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

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