srand(time(null)) на iPhone не работает =(

Мне нужно генерировать случайные числа в моей игре для iPhone. Я использую функцию rand(). Но это недостаточно случайно. Я попытался использовать srand со временем (Null). Но мой генератор случайных чисел был периодическим. /dev/random не является ответом, потому что мне нужно новое случайное число каждые 0,1 секунды.


person Riddick    schedule 06.05.2011    source источник


Ответы (3)


В iOS и OS X используйте arc4random вместо этого. Случайность более высокого качества, и не нужно беспокоиться о раздаче.

Однако rand() не должен быть заметно периодическим, если только вы не вызываете srand каждый раз. Или неправильное использование случайных чисел.

person Anomie    schedule 06.05.2011
comment
arc4random() использует /dev/random в качестве источника. - person JustSid; 06.05.2011
comment
да. Я вызываю srand() каждый раз. =( Я думал, что это решит мою проблему с rand(). - person Riddick; 06.05.2011
comment
@JustSid: arc4random использует /dev/urandom (а не /dev/random) для начального числа, и когда вы вручную вызываете arc4random_stir. - person Anomie; 06.05.2011
comment
@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