【问题标题】:Mt_rand returns 0mt_rand 返回 0
【发布时间】: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

【问题讨论】:

标签: php random


【解决方案1】:

如有疑问,最好阅读手册。

PHP - mt_rand

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

正如marcio 在 cmets 中提到的那样,正确的解决方案是

mt_rand(-mt_getrandmax(), mt_getrandmax())

【讨论】:

    猜你喜欢
    • 2015-08-19
    • 2015-06-15
    • 1970-01-01
    • 2015-06-21
    • 2016-10-28
    • 2019-02-20
    • 2015-06-17
    • 2012-01-04
    • 2018-02-23
    相关资源
    最近更新 更多