Мне нужно генерировать случайные числа в моей игре для iPhone. Я использую функцию rand(). Но это недостаточно случайно. Я попытался использовать srand со временем (Null). Но мой генератор случайных чисел был периодическим. /dev/random не является ответом, потому что мне нужно новое случайное число каждые 0,1 секунды.
srand(time(null)) на iPhone не работает =(
Ответы (3)
В iOS и OS X используйте arc4random вместо этого. Случайность более высокого качества, и не нужно беспокоиться о раздаче.
Однако rand()
не должен быть заметно периодическим, если только вы не вызываете srand
каждый раз. Или неправильное использование случайных чисел.
person
Anomie
schedule
06.05.2011
arc4random() использует /dev/random в качестве источника.
- person JustSid; 06.05.2011
да. Я вызываю srand() каждый раз. =( Я думал, что это решит мою проблему с rand().
- person Riddick; 06.05.2011
@JustSid: arc4random использует
/dev/urandom
(а не /dev/random
) для начального числа, и когда вы вручную вызываете arc4random_stir
.
- person Anomie; 06.05.2011
@Riddick:
srand()
следует вызывать только один раз; подумайте, например, что произойдет, если вы вызовете srand(time(NULL))
дважды или более в течение одной секунды. Да и вообще вызывать его с помощью time(NULL)
тоже не лучшая идея (слишком предсказуемо), хотя для игры это, наверное, не имеет большого значения.
- person Anomie; 06.05.2011
Вместо этого вы можете попробовать random() / srandom(). Лучший генератор, чем rand() / srand().
person
jv42
schedule
06.05.2011
Вы строите для отладки или на симуляторе? Я знаю, что столкнулся с такой проблемой при создании некоторых приложений Windows в режиме отладки, ГСЧ автоматически заполняется постоянным значением для получения согласованных результатов. Возможно, вы захотите проверить, чем он на самом деле заполнен, и получаете ли вы разные результаты при каждом запуске.
person
Dan F
schedule
06.05.2011