Страницы

Поиск по вопросам

понедельник, 16 декабря 2019 г.

Arc4random не работает как должен

#c #objective_c #случайные_числа


Как показывает гугление я не один столкнулся с этой проблемой:


в моем конкретном случае стояла задача сделать рандомным выпадение одной из двух
карточек (симуляция выбора из двух игральных карт). При тестировании обнаружилось что
одна карточка выпала 11 (!) раз подряд. При наличии выбора из трех карточек - одна
из них выпала 6 раз подряд. Решил привязаться к миллисекундам времени нажатия клавиши
выбора, и это в целом решило вопрос в более приемлемую сторону. Хочу поинтересоваться
встречается ли данный вопрос у Вас (то есть не паранойя ли у меня) и если да то как
с ним боретесь.

UPDATE:
читая man для arc4random встречаю строки: "...The arc4random() function returns
     pseudo-random numbers in the range of 0 to (2**32)-1, and therefore
     has twice the range of rand(3) and random(3). ..."
То есть все объяснимо, но не понял зачем тогда рандом который не является рандомным
    


Ответы

Ответ 1



Нет, это не паранойя, а общая болезнь многих генераторов. Ваше решение является одним из самых распространенных и в достаточной мере решает проблему. Если же нужно увеличить порядок случайности, то необходимо будет воспользоваться кастомным рандомом, алгоритмы в сети есть, но тут увеличатся накладные расходы. Можете проверить С аналог, может результаты понравятся больше: srand(time(NULL)); int m = rand();

Комментариев нет:

Отправить комментарий