PHP随机概率

4
我想在PHP中,您可以使用以下代码:
rand(1, 100);

使用以下代码生成1到100之间的随机数。如果我想要使用此代码获取具有4位小数的随机数:

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

那会不会影响获得更高/更低数字的概率和平等性呢?

“rand” 是获取随机数的最糟糕方式之一,因此... - Tim Seguine
不。rand()只是在两个范围之间提供一个伪随机数。首先乘以一个变量,然后再除以同一个变量对结果是高还是低没有影响。 - Fluffeh
http://www.random.org/randomness/ - DarkBee
你想要一个均匀分布的四位随机数吗?rand(1000,9999)可以实现,不过我建议使用mt_rand(1000,9999) - Tim Seguine
@Tim Seguine有更好的方法吗? - Louis
1
mt_rand函数 :) - DarkBee
2个回答

2
那会起作用(有一个警告),尽管我仍然建议使用mt_rand而不是rand。主要区别在于mt_rand使用不同的PRNG(伪随机数生成器)引擎,通常提供具有更好随机性的结果比rand。即使如此,这种方法存在问题,您可能认为它严重或不严重。
潜在的问题来自浮点表示。某些值在二进制浮点中无法表示,因此它们不会准确地显示在输出中。但考虑到您正在生成的值的范围,精度损失不应该很显著。如果对您而言,这成为实际问题的唯一解决方法是固定点算术或二进制编码十进制。如果需要,我可以解释它们的用途。
就概率而言(这正是您真正询问的内容),使用此方法,区间[1,100]中每个数字,其十进制表示法中小数点后最多有4位的数字,将以相等的概率生成,如果忽略近似误差。当然,这是假设随机数生成器实际上生成均匀分布的情况下,才成立的,这也是我推荐使用mt_rand的原因。

我正在寻找一个有4位小数的十进制数,例如:12.8472。对于造成的困惑,我很抱歉。 - Louis
@Louis,我更新了答案,现在更满意了。希望它能澄清一些事情。 - Tim Seguine

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接