Справочник по Ada (Ada 2022)
4.5.6 Операторы с наивысшим приоритетом
Статическая семантика
Оператор наивысшего приоритета abs (абсолютное значение) предопределён для каждого числового типа T со следующим описанием:
function "abs"(Right : T) return T
Оператор наивысшего приоритета not (логическое отрицание) предопределён для каждого булевого типа T, каждого модульного типа T и для каждого одномерного массива типа T, компоненты которого являются булевыми типами, со следующим описанием:
function "not"(Right : T) return T
Результат оператора not для модульного типа определяется как разность между верхней границей базового диапазона типа и значением операнда. Для двоичного модуля это соответствует побитовому дополнению двоичного представления значения операнда.
Оператор not, применяемый к одномерному массиву булевых компонентов, возвращает одномерный булев массив с теми же границами; каждый компонент результата получается путём логического отрицания соответствующего компонента операнда (то есть компонента с тем же значением индекса). Проверяется, что каждый компонент результата принадлежит типу компонентов; исключение Constraint_Error генерируется, если эта проверка не пройдёт.
Оператор возведения в степень ** наивысшего приоритета предопределён для каждого целого типа T со следующим описанием:
function "**"(Left : T; Right : Natural) return T
Возведение в степень также предопределено для каждого типа с плавающей точкой, а также для типа root_real, со следующим описанием (где T — root_real или тип с плавающей точкой):
function "**"(Left : T; Right : Integer'Base) return T
Правый операнд операции возведения в степень — это показатель степени. Значение X**N при положительном значении показателя N равно значению X*X*...*X (с N–1 умножениями), за исключением того, что умножения ассоциированы в произвольном порядке. При N, равном нулю, результат равен единице. При отрицательном значении N (определено только для операнда с плавающей точкой), результат является обратной величиной результата, используя абсолютное значение N в качестве показателя степени.
Разрешения на реализацию
Реализация операции возведения в степень в случае отрицательного показателя степени может генерировать исключение Constraint_Error, если промежуточный результат повторяющихся умножений выходит за безопасный диапазон типа, даже если конечный результат (после обратного вычисления) не будет. (В этом случае лучшим приближением машинного результата обычно будет 0.0.)
ПРИМЕЧАНИЕ Как следует из спецификации, приведенной выше для возведения в степень целого типа, проверяется, что показатель степени не отрицателен. Если эта проверка не пройдёт, генерируется исключение Constraint_Error.