int randomNumber = (arc4random() % 83) + 1;
Это лучший способ генерировать «самый случайный» номер? Или есть лучший способ генерировать случайное число?arc4random Генератор случайных чисел
int randomNumber = (arc4random() % 83) + 1;
Это лучший способ генерировать «самый случайный» номер? Или есть лучший способ генерировать случайное число?arc4random Генератор случайных чисел
arc4random имеет превосходный алгоритм для генерации случайных чисел на основе текущего времени. Существуют и другие функции rand, но они не так хороши и требуют посева.
При использовании arc4random
избежать одного ловушки использования %
с линейными конгруэнтными генераторами (что обычный алгоритм, используемый rand
): биты низкого порядка не менее случайные.
Однако у вас все еще есть проблемы с усечением: то есть, потому что (1 << 32) % 83
равно 77, это означает, что числа от 0 до 76 появляются (слегка) чаще, чем числа между 77 и 82. Чтобы этого избежать, вы должны выбросить входящие (т. е. снова вызовите arc4random
), если он выше (1 << 32)/83 * 83
.
(я предполагаю, что диапазон arc4random
от 0 до 2 -1. Отрегулировать выше объяснения соответствующим образом.)
@ Joe Blow: OP запросил «лучшую» систему генерации случайных чисел, обычно доступную, поэтому я отвечал на это. Кроме того, 'arc4random' является удивительным: он использует энтропию, собранную ядром, и все эти хорошие вещи. –
@ Joe Blow: На самом деле, 'arc4random' - это криптоклассная случайность. Это эквивалентно чтению из '/ dev/arandom'. Таким образом, вы можете использовать его для криптографического материала, если вы правильно обрабатываете случайность (и невольно не искажаете результаты, не делая проверку, о которой я упоминал). –
В настоящее время существует ряд хорошо известных смещений в arc4. Например, http://www.worldlingo.com/ma/enwiki/ru/RC4 «Ключевой поток, генерируемый RC4, в той или иной степени смещен в сторону определенных последовательностей». Вот почему вы не можете использовать arc4 для, например, научно-важных симуляторов MC. – Fattie
Лучший генератор случайных чисел, я когда-либо видел (а также очень ясно, определение случайных средств) можно найти в статье «Новый вид науки» Стивена Вольфрама. Он использовал очень простые клеточные автоматы в качестве своего генератора случайных чисел в течение десятилетий в своей программной программе Mathematica, поэтому он был очень хорошо протестирован.
Вы можете задать этот вопрос: http://stackoverflow.com/questions/3724526/how-to-generate-random-number-from-0-5-to-1-0/3724668#3724668 –