Учитывая функцию R, которая производит истинные случайные 32-битные числа, мне нужна функция, которая возвращает случайные целые числа в диапазоне от 0 до n, где n произвольно (менее 2^32).Случайное число в диапазоне от 0 до n
Функция должна производить все значения от 0 до n с равной вероятностью.
Мне нужна функция, выполняемая в постоянное время без инструкций или циклов if, поэтому что-то вроде функции Java Random.nextInt (n) отсутствует.
Я подозреваю, что простой модуль не будет выполнять работу, если n не является силой 2 - я прав?
Я принял ответ Джейсона, несмотря на это требует петли неустановленной длительности, так как это, кажется, лучший способ для использования в практике и по существу отвечает на мой вопрос. Однако меня все еще интересуют любые алгоритмы (даже если они менее эффективны), которые будут детерминированными по своему характеру и гарантированно прекратятся, как указал Марк Байерс.
Вы можете обратиться к этому близкому вопросу: http://stackoverflow.com/questions/137783/given-a-function-which-produces-a-random-integer-in-the-range-1- to-5-write-a-fun – mquander
@mquander спасибо, когда я задал вопрос, я не видел, что связанный вопрос имеет значение, но теперь я знаю, что ответ я вижу, что это так! –