Существует хорошо зарекомендовавший себя способ вычисления случайного числа между двумя включающими границами:
(random(0,1) * (max - min + 1)) + min
Перенос его на красный должен быть простым, а преобразование его в специальную функцию уменьшит «читаемость»беспокойство.Например:
>> between: func [lower upper][-1 + lower + random upper - lower + 1]
== func [lower upper][-1 + lower + random upper - lower + 1]
>> round average collect [loop 1'000'000 [keep between -10 10]]
== 0.0
-1
выше компенсирует тот факт, что диапазон random
начинается с 1
, а не 0
.
Пока-ярмо between
будетубедитесь, что нижняя граница действительно ниже , чем верхняя граница, выбрав минимальные / максимальные значения из двух данных границ.Я оставляю это как упражнение для читателя.
Другой подход, при котором вы буквально выбираете случайное число из ряда, будет:
>> thru: make op! func [lower upper][collect [until [keep lower greater? lower: lower + 1 upper]]]
== make op! [[lower upper]]
>> -10 thru 10
== [-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10]
>> random/only -10 thru 10
== 5