如何用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;

这不会返回所需的分布。如何更改代码以使其在分发中不统一?

您可以通过以下两个步骤完成:

  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推荐的