mt_rand()
函数的最小值是多少?32位和64位机器的值是否相同?如何使用mt_rand()
生成32位整数(注意不需要高度随机)?背景:我有一台64位开发物理服务器和一台32位生产VPS。刚意识到生产服务器没有生成跨越完整范围的PK。为了找出问题所在,我运行了以下脚本。64位机器从未(或者至少我从未见过)匹配,但32位机器大约有50%的匹配率。
<?php
date_default_timezone_set('America/Los_Angeles');
ini_set('display_errors', 1);
error_reporting(E_ALL);
$count=0;
for ($i = 0; $i <= 10000; $i++) {
$rand=2147483648+mt_rand(-2147483647,2147483647); //Spans 1 to 4294967295 where 0 is reserved
if($rand==2147483649){$count++;}
}
echo('mt_getrandmax()='.mt_getrandmax().' count='.$count);
输出
mt_getrandmax()=2147483647 count=5034