Php 随机概率

Php 随机概率,php,random,Php,Random,我在想,在PHP中,您可以使用如下内容: rand(1, 100); 生成一个介于1和100之间的数字。如果我用这个代码得到一个4位小数的随机数: rand(1 * 10000, 100 * 10000) / 10000; 这会对获得较高/较低数字的概率和平等性产生影响吗?这会起作用(有一点需要注意),尽管我仍然建议使用mt_rand而不是rand。主要区别在于mt_rand使用不同的PRNG(伪随机数生成器)引擎,该引擎通常提供比rand更好的随机性结果。即使如此,这种方法也有一个问题,你

我在想,在PHP中,您可以使用如下内容:

rand(1, 100);
生成一个介于1和100之间的数字。如果我用这个代码得到一个4位小数的随机数:

rand(1 * 10000, 100 * 10000) / 10000;
这会对获得较高/较低数字的概率和平等性产生影响吗?

这会起作用(有一点需要注意),尽管我仍然建议使用
mt_rand
而不是
rand
。主要区别在于
mt_rand
使用不同的PRNG(伪随机数生成器)引擎,该引擎通常提供比
rand
更好的随机性结果。即使如此,这种方法也有一个问题,你可能会考虑,也可能不认为是严重的。 潜在的问题来自浮点表示。某些值不能用二进制浮点表示,因此它们不会精确地显示在输出中。但是,考虑到生成的值的范围,精度损失应该不会太大。如果这对你来说是一个实际问题,我认为唯一的解决方法就是定点算术或二进制编码小数。如有必要,我可以解释它们的用途

但就概率而言(这是您真正要求的),如果我们忽略近似误差,则使用此方法,从间隔
[1100]
中的每一个数字(在其10进制表示的小数点后最多4位)将以相同的概率生成。当然,这是假设随机数生成器实际上生成一个均匀分布,这就是为什么我推荐mt_rand

我不这么认为

如果您希望在PHP中生成更好/更快的随机数,请使用mt_rand()

rand
是获取随机数最糟糕的方法之一,所以……不
rand()
仅给出两个范围之间的伪随机数。先将其乘以一个变量,然后再除以同一个变量,结果是高还是低都没有区别。您想要均匀分布的4位随机数吗
rand(10009999)
可以这样做,不过我建议使用
mt_rand(10009999)
代替mt_rand函数:)我在寻找一个有4位数字的十进制数,即:12.8472很抱歉混淆。@Louis我将答案更新为我更满意的状态。我希望它能澄清一些事情。