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
答案 0 :(得分:1)
在有疑问时阅读本手册总是一个好主意。
警告当max超过2 ^ 32时,mt_rand()返回值的分布偏向于64位版本的PHP上的偶数。 这是因为如果max大于返回的值 mt_getrandmax(),随机数生成器的输出必须是 扩大规模。
如marcio的评论所述,正确的解决方案是
mt_rand(-mt_getrandmax(), mt_getrandmax())