* 金额越大 概率越小 金额越小概率越大 建议 min 和 max 的值不能相差 10以上,相差越大, 计算量越大越慢
* $pow 默认1.6 值越大 取值 1.1 到 2.0, 则分的越散 则 大金额概率越小 ,值越小 则 分的越密集 效果越差 运算越快 越大 运算量越大
* @param int $min 最小金额
* @param int $max 最大金额
*/
function rand_create_youhui($min,$max,$pow=1.6){
$indexArr = [];
$j=1;
for($i=$min;$i<=$max;$i++){
$indexArr[]=['index'=>$j,'amount'=>$max+$min-$i];
$j++;
}
$amountArr = [];
foreach ($indexArr as $key=>$v){
for($i=1;$i<=intval(pow($pow,$v['index'])*$v['index']);$i++){
$amountArr[]=$v['amount'];
}
}
$amount = $amountArr[rand(0,count($amountArr)-1)];
return $amount;
}
在 $pow为 1.6 随机 1到10元的情况下, 随机 1000次结果:
1元 450个
2元242个
3元 146个
4元74个
5元 44个
6元 23个
7元12个
。。。
1 元 450 个
2元