【发布时间】:2015-05-05 18:18:26
【问题描述】:
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
【问题讨论】:
-
连续获得多个零是完全随机的。
-
试试 mt_rand(-mt_getrandmax(), mt_getrandmax()); :)
-
php.net/manual/en/function.mt-getrandmax.php。 mt 的 max 不一定是 PHP 的 int max...
-
@jay:相关xkcd:xkcd.com/221
-
@JayBlanchard 这就是随机数的问题。 You can never really know if they're random