В зависимости от языка, который вы используете, встроенный генератор случайных чисел может
уже есть такая возможность - сделайте немного больше исследований.
Предположим, что генератор случайных чисел, который у вас есть, всегда возвращает числа
в некотором заданном диапазоне. Просто ради аргумента, допустим, диапазон составляет 0,65536, но
вам нужны случайные числа в диапазоне Low..High, 18..35 в вашем примере.
Неправильный способ сделать это будет что-то вроде:
r = (rand() % (High - Low + 1)) + Low
rand () возвращает число в диапазоне 0..65536. Возьмите остаток после деления на
(Высокий - Низкий + 1), который в этом примере (35-18 + 1 = 18). Результатом является число между
0..17. К этому вы добавляете Low (18), который сдвигает результат, r, в диапазон 18..35. Диапазон
Вы ищете.
Числа, сгенерированные таким образом, не имеют равномерного распределения в тех случаях, когда используется делитель
чтобы получить остаток не является четным кратным верхнего предела, возвращаемого
функция rand (). См. Алгоритм Фишера-Йетса - Смещение по модулю .
Чтобы устранить это смещение, вам нужно вычислить наибольшее число, которое меньше того, которое возвращает rand (), но равномерно делит на (High - Low + 1).
В вашем случае это 3640 * 18 = 65520. Используйте это как фильтр высоких частот на числах
возвращается через rand () как
следующим образом:
do forever {
r = rand()
if r <= 65520 then {
r = (r % (High - Low + 1)) + Low
break
}
}
Теперь генерируемые вами случайные числа должны иметь те же характеристики распределения, что и rand ().