Все числовые функции ARexx-a (за исключением HASH()) оперируют исключительно с десятичными числами. Как аргументы функций, так и возвращаемые ими результаты подпадают под действие текущей установки NUMERIC DIGITS (см. соответствующее описание).
ABS()res = ABS(<число>)
Возвращает абсолютное значение числа.
HASH()res = HASH(<строка>)
Возвращает десятичное число - кэш-атрибут строки. Кэш-атрибут является некоторым ассоциированным с заданной строкой числом, которое часто используется в качестве индекса при поиске строк в различных структурах данных. Кэш-атрибут вычисляется исходя из содержимого строки и поэтому, в принципе, разные строки должны иметь различные значения кэш-атрибутов. Способ вычисления кэш-атрибута в ARexx-e заключается в сложении всех ASCII-значений литер строки, а затем нахождении остатка от деления полученной суммы на 256 (т.е. используется только младший байт суммы). Алгоритмы вычисления кэш-атрибутов, вообще говоря, постоянно балансируют между степенью "уникальности" полученного значения и скоростью его вычисления. Пример:
say HASH('Неужто уникальное значение?') ==> 89
MAX()res = MAX(<число>,<число>[,<число>][...])
Результат равен наибольшему из аргументов.
MIN()res = MAX(<число>,<число>[,<число>][...])
Результат равен наименьшему из аргументов.
RANDOM()res = RANDOM([<минимум>,][<максимум>,][<старт>])
Результатом является целое неотрицательное псевдослучайное число. Если не указано минимальное значение, то наименьшим результатом может быть ноль. Если не указано максимальное значение, то оно принимается равным 999. Если указано только одно число в качестве аргумента, то считается, что это - параметр "максимум", т.е. результат работы функции не может превысить это значение. Если указан целочисленный параметр "старт", то он считается отправной точкой для расчета значений очередной псевдослучайной последовательности (полезно, например, при отладке программы, когда нужны предсказуемые результаты).
Если необходимо, чтобы каждый вызов RANDOM() возвращал следующее значение из псевдослучайной последовательности, то необходимо по крайней мере однажды исполнить в вашей программе RANDOM() с параметром "старт". В противном случае для одних и тех же значений минимума и максимума будут всегда возвращаться одни и те же числа. Обычно в качестве параметра "старт" берется результат работы функции ТIМЕ(), который сам по себе достаточно случаен, т.е. где-нибудь в начале программы надо исполнить:
RANDOM(,, TIME())
а затем можно спокойно пользоваться RANDOM() для получения случайных чисел (разумеется, не задавая параметр "старт").
RANDU()res = RANDU([<старт>])
Результатом является случайное число в диапазоне между нулем и единицей. Инициализация псевдослучайной последовательности происходит так же, как и у функции RANDOM().
SIGN()res = SIGN([<число>])
Функция возвращает -1, если "число" отрицательное; 0, если "число" равно нулю; 1, если "число" положительное
TRUNC()res = TRUNC(<число>[,<длина>])
Функция форматирует дробную часть числа, подгоняя число ее цифр в соответствии с параметром "длина". Если "длина" отсутствует, то дробная часть отбрасывается. Округление при форматировании не производится - если "длина" меньше, чем число десятичных цифр в дробной части, то лишние цифры просто отбрасываются. Если "длина" больше, чем число десятичных цифр в дробной части, то дробная часть дополняется справа необходимым количеством нулей. Примеры:
say TRUNC(10.1234) ==> 10 say TRUNC(10.1234, 2) ==> 10.12 say TRUNC(10.1234, 6) ==> 10.123400