PHP随机概率

标签 php random

我在想,在 PHP 中,您会使用这样的东西:

rand(1, 100);

生成一个 1 到 100 之间的数字。如果我要使用此代码来获得一个 4 位小数的随机数:

rand(1 * 10000, 100 * 10000) / 10000;

这会影响获得更高/更低数字的概率和平等性吗?

最佳答案

虽然我仍然建议使用 mt_rand 而不是 rand,但这会起作用(有一个警告)。主要区别在于 mt_rand 使用不同的 PRNG(伪随机数生成器)引擎,该引擎通常提供比 rand 具有更好随机性的结果。即便如此,此方法仍存在一个问题,您可能认为这个问题很严重,也可能不严重。

潜在的问题来自浮点表示法。某些值无法用二进制 float 表示,因此它们不会准确显示在输出中。不过,考虑到您生成的值的范围,精度损失应该不会很大。如果这对你来说是一个实际问题,我看到的唯一方法是定点算术或二进制编码的小数。如有必要,我可以解释它们的用途。

但是就概率而言(这是您真正问的),使用此方法,区间 [1,100] 中的每个数字在其以 10 为底的表示形式中小数点后最多有 4 位数字如果我们忽略近似误差,将以相等的概率生成。当然,这是假设随机数生成器实际上生成了均匀分布,这就是我推荐 mt_rand 的原因。

关于PHP随机概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27083876/

相关文章:

php - 随机变量时 undefined offset ?

PHP随机链接不重复

vba - 使用 VBA 在单元格范围内生成真正的随机数

c# - 快速随机数生成 - 每毫秒多次

java - 按相同顺序随机播放多个文件

PHP MYSQL 从表中验证用户并设置 SESSION 'username'

php - 我如何使用 PHP 将数组插入 mysql?

php - 如何创建指向另一个 PHP 页面的链接

php - 在 PHP 中对 2 列进行排序而无需重做 MySQL 查询

php - WordPress 媒体库访问 PHP