php - 如何从位流中获取两个值之间的整数?

标签 php

我有一个项目使用 php 的 mt_rand() 来生成不同的随机整数,但我最近获得了对真实随机位流的访问权。我无法弄清楚如何创建类似于 mt_rand() 的函数,我可以在其中从我的位流中获取两个值之间的随机整数。我怎样才能做到这一点?

最佳答案

我将只读取 PHP_INT_SIZE * 8 位并将结果数字压缩到您需要的范围内:

function squash($nr, $min, $max)
{
    return $min + $nr % ($max - $min);
}

另一种方式:

function squash($nr, $min, $max)
{
    return $min + round($nr / PHP_INT_MAX * ($max - $min));
}

这只是我想到的,为什么不直接使用你的随机流并将其插入 mt_srand():

function squash($nr, $min, $max)
{
    mt_srand($nr);
    return mt_rand($min, $max);
}

关于php - 如何从位流中获取两个值之间的整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10896997/

相关文章:

php - SimpleXML:使用包含命名空间的 XML

php - Phinx迁移SQLSTATE[42S01] : Base table or view already exists:

javascript - 在具有值的表单中使用图像作为选项

php - 如何在 Symfony3 表单中设置默认国家?

php - 如何使 in_memory security.yaml 提供的用户在 Symfony 4.3 中使用登录表单正常工作?

php - 如何在 PSR-15 中间件堆栈中调用函数( Controller 操作)

PHPUnit 数据提供程序参数计数错误

php - 如果用户未登录,则会显示闪烁消息

php - 如何让 php 的curl 接受 SSLv3?

php - 在 PHP 中创建一个 Catch-All 处理程序?