如何在 PHP 中编码非均匀随机分布

How to code a non-uniform random distribution in PHP

我是新来的:) 我试图在 PHP 中创建一个非均匀随机分布代码,具有以下小数概率(精度 2)

From 1.10 to 1.15 = 40%
From 1.16 to 1.20 = 30%
From 1.21 to 1.25 = 20%
From 1.26 to 1.30 = 10%

这是我的实际代码:

$low = 1.1
$high = 1.3
$multiplier = mt_rand($low*100,$high*100)/100;

这不是 return 所需的分布。如何更改我的代码以使其分布不均匀?

您可以分两步完成:

  1. 获取一个1-100的随机数来决定它在哪个范围内(40%,30%,20%,10%)
  2. 根据百分比范围计算你的随机浮动
$chance = rand(1,100);
switch(true) {
    case ($chance <= 40):
        // 40% 1.10 - 1.15
        echo 1+rand(10,15)/100;
        break;
    case ($chance <= 70):
        // 30% 1.16 - 1.20
        echo 1+rand(16,20)/100;
        break;
    case ($chance <= 90):
        // 20% 1.21 - 1.25
        echo 1+rand(21,25)/100;
        break;
    default:
        // 10% 1.26 - 1.30
        echo 1+rand(26,30)/100;
        break;
}

运行 10'000'000 次,给出以下百分比:

From 1.10 to 1.15 = 40.00223%
From 1.16 to 1.20 = 29.99841%
From 1.21 to 1.25 = 20.00157%
From 1.26 to 1.30 = 9.99779%

更新:更新为 icio 推荐