API Rnd - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Rnd
Оглавление · Алфавитный указатель · BASIC built-ins
ClassicUO • Runtime API
Возвращает псевдослучайную дробь с управлением последовательностью.
Точный синтаксис
Rnd() -> Decimal
Rnd(seedMode:Any) -> Decimal
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
seedMode— Необязательное число. >0 или отсутствие — следующее число; 0 — повтор последнего (при первом вызове создаёт его); <0 — заново инициализирует последовательность по этому значению и возвращает её первое число.
Возвращает
Decimal в полуинтервале [0,1): 0 допустим, 1 не возвращается. Это не случайное целое. Последовательность принадлежит текущему runtime и не предназначена для криптографии.
Поведение
- Отрицательное значение каждый раз сбрасывает генератор. Для продолжения после Rnd(-123) вызывайте Rnd() либо Rnd(1), а не снова Rnd(-123).
- Для целых чисел в включительном диапазоне используйте Random(min,max).
Примеры
Пример 1. Новая случайная дробь
# Новая случайная дробь
#
# Возвращает псевдослучайную дробь с управлением последовательностью.
#
# Decimal в полуинтервале [0,1): 0 допустим, 1 не возвращается. Это не случайное целое.
# Последовательность принадлежит текущему runtime и не предназначена для криптографии.
SUB Main()
# Аргументов нет: берётся следующий элемент последовательности.
# Результат не меньше 0 и строго меньше 1.
VAR value = Rnd()
UO.Print(CStr(value))
END SUB
Разбор параметров и выполнения:
- Аргументов нет: берётся следующий элемент последовательности.
- Результат не меньше 0 и строго меньше 1.
Пример 2. Повторить последний результат
# Повторить последний результат
#
# Возвращает псевдослучайную дробь с управлением последовательностью.
#
# Decimal в полуинтервале [0,1): 0 допустим, 1 не возвращается. Это не случайное целое.
# Последовательность принадлежит текущему runtime и не предназначена для криптографии.
SUB Main()
# seedMode=0 повторяет уже созданный результат.
# Сравнение даст 1, если между этими строками не было другого вызова Rnd в том же runtime.
VAR first = Rnd()
VAR same = Rnd(0)
UO.Print(STR(first = same))
END SUB
Разбор параметров и выполнения:
- seedMode=0 повторяет уже созданный результат.
- Сравнение даст 1, если между этими строками не было другого вызова Rnd в том же runtime.
Пример 3. Воспроизводимая последовательность
# Воспроизводимая последовательность
#
# Возвращает псевдослучайную дробь с управлением последовательностью.
#
# Decimal в полуинтервале [0,1): 0 допустим, 1 не возвращается. Это не случайное целое.
# Последовательность принадлежит текущему runtime и не предназначена для криптографии.
SUB Main()
# -123 сбрасывает последовательность; вызов без аргумента продолжает её.
# Первое и repeated совпадут. Повторный сброс не выдаёт second.
VAR first = Rnd(-123)
VAR second = Rnd()
VAR repeated = Rnd(-123)
UO.Print(STR(first = repeated))
END SUB
Разбор параметров и выполнения:
- -123 сбрасывает последовательность; вызов без аргумента продолжает её.
- Первое и repeated совпадут. Повторный сброс не выдаёт second.