Возможный дубликат:
как получить равномерную случайность между a, b известной унифицированной случайной функцией RANDOM (0,1)
В книге "Введение в алгоритмы" есть акциз:
Опишите реализацию процедуры Random (a, b), которая вызывает только вызовы Random (0,1). Каково ожидаемое время работы вашей процедуры, как функция a и b? Вероятность результата Random (a, b) должна быть чистой равномерно распределенной, как Random (0,1)
Для случайной функции результаты представляют собой целые числа между a и b, включительно. Например, Random (0,1) генерирует либо 0, либо 1; Случайное (a, b) порождает a, a + 1, a + 2,..., b
Мое решение таково:
for i = 1 to b-a
r = a + Random(0,1)
return r
время работы T = b-a
Это правильно? Являются ли результаты моих решений равномерно распределенными?
Спасибо
Что делать, если мое новое решение выглядит так:
r = a
for i = 1 to b - a //including b-a
r += Random(0,1)
return r
Если это неверно, почему r + = Random (0,1) делает r неравномерно распределенным?