11

我知道鼓励使用mt_rand()over,rand()因为它使用 Mersenne Twister 而不是 PRNGrand()使用的任何东西,但这里似乎从未考虑过:用户活动。

事实上,用户的行为可以被认为是非常随机的。例如,在任何给定时刻,用户可能有 4% 的机会触发rand()一个功能调用,一个用户触发三个rand()调用的概率为 8% shuffle(),一个用户触发两个调用的概率为 20% rand(),并且每个用户加载页面时,PRNG 会前进 1。

毕竟,NPC 运动难道不是让神奇宝贝游戏中的 RNG 滥用如此令人沮丧的原因吗?

那么,请记住,虽然rand()确实有其模式,但用户活动的随机性和用途的多样性rand()足以使rand()' 的缺点无关紧要吗?在绝对意义上,mt_rand()是“更随机”。但这与人类元素的熵相比如何?

4

2 回答 2

4

If you assume calls to rand() are generated by human users at random times then i guess your logic is correct.

However imagine a bot that sends same requests each X seconds (at night hours not interrupted by human calls) or a simple script that runs for a given amount of time and runs rand() one by one. Then you can not fully depend on randomness.

comment from php.net :

Note that the automatic seeding seems to be done with the current number of seconds which means you can get the same results for several runs on a fast server. Either call srand() yourself with a more frequently changing seed or use mt_rand() which doesn't appear to suffer from the problem.

于 2013-01-09T21:33:55.300 回答
0

但这与人类元素的熵相比如何?

我想象这种情况:

  • 拥有数千名用户的游戏。
  • 出于某种原因,每 X 分钟,您应该为每个用户设置一个随机值(每次都以相同的顺序给出)

由于一个伪随机函数,更有可能与用户 XXX 和用户 YYY 始终保持相同的距离。因为伪随机的问题之一是,在足够数量的循环之后,一个区域可以“更”可预测。

于 2013-01-09T21:49:23.280 回答