php - mt_rand() 和 rand() 的区别

标签 php performance optimization random

使用 mt_rand($min, $max)rand($min, $max) 关于速度有什么区别?

最佳答案

更新

从 PHP 7.1 开始,mt_rand 完全取代了 randrand 成为了 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_srandthe srand docs .我相信它们会包含更多信息

如果 mt_rand 的算法转化为性能的提高,那么这对您来说非常好,但这是一个快乐的巧合。长话短说:

mt_rand的引入是为了修复rand存在的问题!

关于php - mt_rand() 和 rand() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28760650/

相关文章:

php - 在 php 中插入多个查询的多个条件

php - 推送通知Jquery移动cordova应用程序android,重复的id

python - 如何通过 python/pandas 中另一个数据框的值来标记数据框列的最有效方式?

c++ - 在 OpenGL4.0 中使用交错属性数组提高性能

PHP : What is the benefit of spl_autoload_register? 包含的性能

algorithm - 优化房间的 3D 布局?

optimization - 是什么让 Apple 的 PowerPC memcpy 如此之快?

php - 将数组数据准备到另一个结构以使用某些规则呈现定义的 HTML 输出的算法

python - 在 __iter__ 上对字典进行排序

php - Laravel + Vuejs 具有数据库值和更新的输入表单