Справочник по Ada 95
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.)
ПРИМЕЧАНИЯ
19 Как следует из приведённого выше определения возведения в степень целочисленного типа, проверяется, что показатель степени не отрицательный. Если эта проверка не пройдена, генерируется исключение Constraint_Error.