使用 mt_rand($min, $max)
和 rand($min, $max)
关于速度有什么区别?
最佳答案
更新
从 PHP 7.1 开始,mt_rand
完全取代了 rand
,rand
成为了 mt_rand
的别名。下面的回答主要针对旧版本这两个函数的区别,以及引入mt_rand
的原因。
速度并不是引入 mt_rand
的原因!
rand
函数早在 mt_rand
之前就已存在,但它存在严重缺陷。 PRNG 必须获得一些熵,它从中生成一系列随机数。如果您打印出由 rand()
生成的十个数字的列表,如下所示:
for ($i=0;$i<10;++$i)
echo rand(), PHP_EOL;
输出可用于计算出 rand
种子是什么,您可以使用它预测下一个随机数。有一些工具可以做到这一点,所以谷歌一下并测试一下。
rand
也存在一个问题,即相对快速地显示其随机数中的模式 as demonstrated here .一个问题 mt_rand
似乎也解决得更好。
mt_rand
使用更好的随机化算法 (Mersenne Twist),在确定种子之前需要知道更多的随机数,并且速度更快。 这并不意味着 mt_rand
根据定义比 rand
更快,这仅意味着生成的数字更快,并且似乎对函数的性能没有真正的影响,正如这里的其他答案所证明的那样。
无论哪种方式,看看the mt_srand
和 the srand
docs .我相信它们会包含更多信息
如果 mt_rand
的算法转化为性能的提高,那么这对您来说非常好,但这是一个快乐的巧合。长话短说:
mt_rand
的引入是为了修复rand
存在的问题!
关于php - mt_rand() 和 rand() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28760650/