菲律宾比索兰特,但获得另一个数字的机会更大


PHP rand but with a bigger chance of getting another number?

我有一个 php 文件,我想在其中获取一个随机数,但我希望它有 80% 的机会成为 1。然后 20% 为 2、3 或 4。通常你可以做这样的事情:

rand(1, 4)

但正如我所解释的,我希望有更高的机会获得1

您可以使用另一个 rand :

$rand = rand(1, 10);
if ($rand <= 8)
  $value = 1;
else
  $value = rand(2,4);

在 [-10, 4] 中生成一个数字并转换:

$value = max(1, rand(-10, 4))

这将具有正确的分布,并且应该表现良好。它不像涉及两次平局的解决方案那样容易处理,但它会更快。

尽管@Bathsheba和@djidi提供的答案是最好的。这是一种不同的方法。
由于1部分应为 80%,2,3,4应为 20%,因此我们将生成的随机数数相乘,使 3 个数字等于 20%(在本例中以 15 结尾):

<?php
$random = rand(1,15);
$result = 0;
switch($random) {
    case 2:
    case 3:
    case 4:
        $result = $random;
        break;
    default:
        $result = 1;
}
echo $result;

获得 1 的几率 = 12/15 = 0.8
获得 2、3 或 4 的机会 = 1/15 = 0.0666666666667

在拔示巴的回答中:
获得 1 = 12 * 1/15 = 12/15 = 0.8 的机会(因为 -10 和 4 之间有 15 个数字)
获得 2、3 或 4 的机会 = 1/15 = 0.0666666666667(因为只有 3 个数字在max()保持不变的情况下幸存下来)

在吉迪的回答中:
获得 1 的几率 = 8/10 = 0.8
获得 2、3 或 4

的机会 = 2/10 * 1/3 = 2/30 = 1/15 = 0.0666666666667

数学保持不变=)