我在想,在 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/