我需要帮助以使我的概率赔率更接近低百分比的测试结果。我所拥有的似乎适用于 1% 或更高的百分比,但我需要它适用于非常低的百分比,例如 0.02%(低至小数点后 4 位)。在运行 1000-100000 次测试后,任何低于 1% 的结果往往最终有大约 1% 的概率,结果相似。示例结果ID Odds Test Total Test Odds1 60.0000 301773 60.3546%2 30.0000 148360 29.672%3 9.9800 44897 8.9794%4 0.0200 4970 0.994%功能// $values = [1,2,3,4]// $weights = [60.0000,30.0000,9.9800,.0200]private function getRandom($values, $weights){ $count = count($values); $i = 0; $n = 0; $num = mt_rand(0, array_sum($weights)); while($i < $count) { $n += $weights[$i]; if($n >= $num) break; $i++; } return $values[$i]; }
1 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
mt_rand
返回一个整数,因此将其与 0.02 进行比较实际上与将其与 1 进行比较是相同的。因此,对于小于 1% 的权重,您总是得到大约 1%。尝试$num
像这样计算:
$num = mt_rand(0, array_sum($weights) * 100) / 100;
- 1 回答
- 0 关注
- 163 浏览
添加回答
举报
0/150
提交
取消