PHP rand和mt_rand的区别?
答案
这两个函数都是用于产生随机数,都有两种语法:
int rand(void)
:产生0
到getrandmax()
之间的随机数int mt_rand(void)
:产生0到mt_getrandmax()
之间的随机数int rand(int $min, int $max)
:产生从$min
到$max
之间的随机数int mt_rand($min, $max)
:产生从$min
到$max
之间的随机数mt_rand()
使用梅森旋转算法中已知的特性作为随机发生器,rand()
使用 libc 中未知的特性作为随机发生器,所以:mt_rand()
生成更好的随机数。mt_rand()
性能上比rand()
快4倍
答案解析
梅森旋转算法(Mersenne twister)是一个伪随机数发生算法。由松本真和西村拓士在1997年开发,基于有限二进制字段上的矩阵线性递归 F2。可以快速产生高质量的伪随机数,修正了古典随机数发生算法的很多缺陷。
Mersenne Twister这个名字来自周期长度取自梅森素数的这样一个事实。这个算法通常使用两个相近的变体,不同之处在于使用了不同的梅森素数。一个更新的和更常用的是MT19937, 32位字长。还有一个变种是64位版的MT19937-64。对于一个k
位的长度,Mersenne Twister会在 [0,2k-1]的区间之间生成离散型均匀分布的随机数。