Axiom Справочник языка

Справочник языка

Модуль, знак, границы и случайные числа

Часть числовых задач сводится к работе с величиной и направлением: убрать знак, определить, в какую сторону меняется значение, выбрать меньшее или большее из двух, удержать результат в допустимых пределах. Эти операции выполняют ABS, SGN, MIN, MAX, CLAMP и SETSIGN, а случайные исходы даёт RND. Каждая функция имеет собственный договор по типу результата и граничным значениям.

ABS

ABS возвращает модуль числа, то есть его расстояние или величину отклонения без знака. Вызывать функцию можно в выражении консольной или графической программы; оператор SCREEN или CANVAS не требуется.

Синтаксис

ABS(<значение>)

Аргументы

Аргумент должен быть числом типа INTEGER, LONG, DOUBLE или DECIMAL. Передайте выражение, над которым нужно выполнить указанное вычисление.

Результат

Тип результата совпадает с типом аргумента.

Правила и ограничения

Ноль остаётся нулём. Минимальные INTEGER и LONG не имеют положительного аналога в своём типе.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3008 возникает при переполнении модуля минимального INTEGER или LONG.

Пример

PRINT ABS(-18)
PRINT ABS(0)

Ожидаемый вывод:

18
0

См. также

Указатель встроенных функций

SGN

Функция SGN возвращает знак числа в виде −1, 0 или 1, что позволяет определить направление изменения числа по его знаку. Вызов допустим в выражении консольной и графической программы, оператор SCREEN или CANVAS не нужен.

Синтаксис

SGN(<значение>)

Аргументы

Аргумент должен быть числом типа INTEGER, LONG, DOUBLE или DECIMAL. Передайте выражение, над которым нужно выполнить указанное вычисление.

Результат

Результат INTEGER: −1 для отрицательного числа, 0 для нуля, 1 для положительного.

Правила и ограничения

Положительный и отрицательный ноль DOUBLE дают 0.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента.

Пример

PRINT SGN(-9)
PRINT SGN(0)
PRINT SGN(9)

Ожидаемый вывод:

-1
0
1

См. также

Указатель встроенных функций

MIN

MIN возвращает меньшее из двух чисел, поэтому выбрать меньшее число можно непосредственно в выражении. Функция работает в выражениях консольных и графических программ, оператор SCREEN или CANVAS не требуется.

Синтаксис

MIN(<первое число>, <второе число>)

Аргументы

Передайте два числовых выражения; первое и второе задают сравниваемые величины.

Результат

Результат имеет общий числовой тип аргументов.

Правила и ограничения

Аргументы приводятся к общему числовому типу до сравнения; смешение DECIMAL и DOUBLE в одном вызове отклоняется компилятором; при равенстве выбирается первый.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента.

Пример

PRINT MIN(8, 3)
PRINT MIN(2.5, 7)

Ожидаемый вывод:

3
2.5

См. также

Указатель встроенных функций

MAX

Функция MAX возвращает большее из двух чисел и позволяет выбрать его непосредственно в выражении. Вызывается она в выражениях консольных и графических программ; оператор SCREEN или CANVAS не требуется.

Синтаксис

MAX(<первое число>, <второе число>)

Аргументы

Передайте два числовых выражения; первое и второе задают сравниваемые величины.

Результат

Результат имеет общий числовой тип аргументов.

Правила и ограничения

Аргументы приводятся к общему числовому типу до сравнения; смешение DECIMAL и DOUBLE в одном вызове отклоняется компилятором; при равенстве выбирается первый.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента.

Пример

PRINT MAX(8, 3)
PRINT MAX(2.5, 7)

Ожидаемый вывод:

8
7

См. также

Указатель встроенных функций

CLAMP

CLAMP возвращает число, ограниченное заданным включительным диапазоном. Так ограничивают громкость, координату или другое числовое значение допустимым диапазоном. Вызывать функцию можно в выражении консольной или графической программы — оператор SCREEN или CANVAS не нужен.

Синтаксис

CLAMP(<значение>, <нижняя граница>, <верхняя граница>)

Аргументы

Все три аргумента числовые. Значение задаёт ограничиваемое число; нижняя и верхняя границы задают допустимый диапазон.

Результат

Ниже диапазона возвращается нижняя граница, выше — верхняя; внутри диапазона возвращается исходное значение. Тип — общий числовой тип трёх аргументов.

Правила и ограничения

Границы включены. Равные границы допустимы. Смешение DECIMAL и DOUBLE среди аргументов одного вызова отклоняется компилятором.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает, если нижняя граница больше верхней.

Пример

PRINT CLAMP(-5, 0, 100)
PRINT CLAMP(45, 0, 100)
PRINT CLAMP(120, 0, 100)

Ожидаемый вывод:

0
45
100

См. также

Указатель встроенных функций

SETSIGN

SETSIGN возвращает модуль первого числа со знаком второго числа, объединяя отдельно вычисленные величину и направление. Вызов допустим в выражении консольной и графической программы; оператор SCREEN или CANVAS не требуется.

Синтаксис

SETSIGN(<значение>, <источник знака>)

Аргументы

Оба аргумента числовые. Значение определяет модуль и тип результата; источник знака определяет только знак.

Результат

Тип результата совпадает с типом первого аргумента.

Правила и ограничения

Для DOUBLE учитывается знак отрицательного нуля; SGN этого различия не делает.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3008 возникает, если изменение знака минимального INTEGER или LONG требует непредставимого положительного значения.

Пример

PRINT SETSIGN(12, -5)
PRINT SETSIGN(-12, 5)
PRINT SETSIGN(3, -0.0)

Ожидаемый вывод:

-12
12
-3

См. также

Указатель встроенных функций

RND

RND возвращает очередное псевдослучайное число и служит для получения случайных исходов; начальное состояние генератора задаёт оператор RANDOMIZE. Вызывается функция в выражениях консольных и графических программ, оператор SCREEN или CANVAS не требуется.

Синтаксис

RND()

Аргументы

Аргументов нет.

Результат

Результат DOUBLE находится в полуинтервале [0, 1): ноль допустим, единица исключена.

Правила и ограничения

Каждый вызов продвигает состояние генератора. Одинаковое зерно RANDOMIZE воспроизводит последовательность на той же среде исполнения. При масштабировании диапазона учитывайте точность DOUBLE и переполнение промежуточной ширины. INT возвращает INTEGER, даже если ширина вычислена как LONG.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента.

Пример

RANDOMIZE 42
DIM first AS DOUBLE = RND()
RANDOMIZE 42
PRINT RND() = first
PRINT first >= 0 AND first < 1

Ожидаемый вывод:

TRUE
TRUE

См. также

Указатель встроенных функций