Как сгенерировать длинное случайное число из короткого случайного числа? - PullRequest
1 голос
/ 26 января 2011

У меня короткое случайное число, скажем, int 0-999.

Я не знаю распределение входных данных. Теперь я хочу сгенерировать случайное число в диапазоне 0-99999 на основе входных данных без изменения формы распределения. Я знаю, что есть способ сделать входные данные для [0,1], разделив его на 999, а затем умножив на 99999, чтобы получить результат. Однако этот метод не охватывает все возможные значения, например, 99999 никогда не будет получен.

Ответы [ 2 ]

1 голос
/ 26 января 2011

Предполагая, что ваш вход является неким источником случайности ...

Вы можете взять два последовательных входа и объединить их:

input() + 1000*(input()%100)

Будьте осторожны, хотя. Это зависит от источника энтропии, так что заданный номер входа не всегда сопровождается одним и тем же последующим номером входа. Если вашим источником является PRNG, предназначенный для циклического переключения между числами 0–999, этот метод не будет работать.

Для большинства источников производственной энтропии (например, / dev / urandom) это должно работать нормально. OTOH, с источником производственной энтропии вы можете получить случайное число в диапазоне 0–99999 довольно напрямую.

0 голосов
/ 26 января 2011

Вы можете попробовать что-то вроде следующего:

(input * 100) + random

где случайное число - это случайное число от 0 до 99.

Проблема в том, что входные данные только указывают, какой диапазон 100 использовать. Например, 50 просто говорит, что у вас будет число от 5000 до 5100 (чтобы сохранить аналогичное распределение формы). Какой номер выбрать между 5000 и 5100, зависит от вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...