Mt_rand返回0

时间:2015-05-05 18:18:27

标签: php random

mt_rand(~PHP_INT_MAX, PHP_INT_MAX);

运行几次给我以下输出:

php > echo mt_rand(~PHP_INT_MAX, PHP_INT_MAX) . PHP_EOL;
0
php > echo mt_rand(~PHP_INT_MAX, PHP_INT_MAX) . PHP_EOL;
0
php > echo mt_rand(~PHP_INT_MAX, PHP_INT_MAX) . PHP_EOL;
-3445259641993297920
php > echo mt_rand(~PHP_INT_MAX, PHP_INT_MAX) . PHP_EOL;
0
php > echo mt_rand(~PHP_INT_MAX, PHP_INT_MAX) . PHP_EOL;
0
php > echo mt_rand(~PHP_INT_MAX, PHP_INT_MAX) . PHP_EOL;
0

它似乎不是随机的。任何人都可以解释为什么它经常返回0?我期待一个"随机"最低和最高可用之间的数字

更重要的是,如果你改变它像

那样

echo mt_rand(-PHP_INT_MAX, PHP_INT_MAX)

它将开始返回1而不是0

1 个答案:

答案 0 :(得分:1)

在有疑问时阅读本手册总是一个好主意。

PHP - mt_rand

  

警告当max超过2 ^ 32时,mt_rand()返回值的分布偏向于64位版本的PHP上的偶数。   这是因为如果max大于返回的值   mt_getrandmax(),随机数生成器的输出必须是   扩大规模。

marcio的评论所述,正确的解决方案是

mt_rand(-mt_getrandmax(), mt_getrandmax())