Я знаю, что рекомендуется использовать mt_rand()
над rand()
потому что он использует Mersenne Twister над любым PRNG rand()
, но вот что-то, что никогда не кажется факторизованным в: активности пользователя.
Фактически, действия пользователей можно считать довольно случайными. Например, в любой момент может возникнуть 4% -ный шанс, что пользователь может вызвать вызов rand()
для одной функции, 8% -ный шанс для пользователя, вызывающего три вызова rand()
и shuffle()
, 20% пользователя, вызывающего два вызова rand()
, и каждый раз, когда пользователь загружает страницу, PRNG продвигается одним.
В конце концов, не является ли движение NPC тем, что делает RNG-злоупотребление в играх Pokémon настолько расстраивающим?
Итак, имея в виду, что, хотя у rand()
есть свои шаблоны, является случайность действий пользователей и многообразие применений rand()
достаточных для того, чтобы сделать недостатки rand()
неуместными? В абсолютном выражении mt_rand()
является «более случайным». Но как это соотносится с энтропией человеческого элемента?
Если вы предполагаете, что вызовы rand () генерируются человеческими пользователями в случайные моменты, то я предполагаю, что ваша логика правильная.
Однако представьте себе бота, который отправляет одни и те же запросы каждые X секунд (в ночные часы, не прерываемые человеческими вызовами), или простой скрипт, который выполняется в течение определенного времени и запускает rand () один за другим. Тогда вы не можете полностью зависеть от случайности.
комментарий от php.net:
Обратите внимание, что автоматическое сеяние, по-видимому, выполняется с текущим количеством секунд, что означает, что вы можете получить одинаковые результаты для нескольких прогонов на быстром сервере. Либо вызовите srand () самостоятельно с более часто меняющимся семенем, либо используйте mt_rand (), который, как представляется, не страдает от проблемы.
Но как это соотносится с энтропией человеческого элемента?
Я предполагаю, что этот сценарий:
Из-за псевдослучайной функции более вероятно с пользователем XXX, и пользователь YYY всегда имеет одинаковое расстояние. Поскольку одна из проблем псевдослучайности заключается в том, что область может быть «более» предсказуемой после достаточного количества циклов.