Php 什么是最有效的方法,使和赔率系统?
我试图设计一个赔率系统,从1-100,但它也使用0-1的罕见赔率 有人告诉我应该使用浮点格式,但我不知道 基本上我有Php 什么是最有效的方法,使和赔率系统?,php,math,random,probability,Php,Math,Random,Probability,我试图设计一个赔率系统,从1-100,但它也使用0-1的罕见赔率 有人告诉我应该使用浮点格式,但我不知道 基本上我有 if (mt_rand(1,1000)/100 == $odds) {} else if (mt_rand(1,100) == $odds) {} 然而,这只会产生相同的概率 我在PHP手册中查找了浮点格式,但是那里的答案对我没有帮助。浮点值是不精确的。(见和。) 不能对浮点值使用==。由于固有的精度损失,简单的5/10==0.5可能已经是错误的 您可以在比较之前对数字进行四舍
if (mt_rand(1,1000)/100 == $odds) {} else if (mt_rand(1,100) == $odds) {}
然而,这只会产生相同的概率
我在PHP手册中查找了浮点格式,但是那里的答案对我没有帮助。浮点值是不精确的。(见和。) 不能对浮点值使用
==
。由于固有的精度损失,简单的5/10==0.5
可能已经是错误的
您可以在比较之前对数字进行四舍五入,我建议您将浮点数预转换为整数:
# 52 == 100*0.52
if (mt_rand(1,100) == round(100*$odds)) {
您可以将赔率转换为一个整数99
,并将其与1
到100
范围内的一个随机整数进行比较,而不是将0.99
与另一个浮点数进行比较。如果赔率已经是一个整数,而不是浮点数,那么*100
乘法将已经将其从第一个(伪浮点数)比较中删除。If($doffics<1){
if($odds < 1){
// floating point math here
if((float)mt_rand(0,100) / 100.0 < $odds){
echo "you're a float winner, harry";
}
}else{
if(mt_rand(0,100) < $odds){
echo "you're an int winner, harry!";
}
}
//这里是浮点数学
如果((浮动)百万兰特(0100)/100.0<赔率){
echo“你是花车冠军,哈利”;
}
}否则{
如果(百万兰特(0100)<$赔率){
echo“你是一个整数赢家,哈利!”;
}
}
了解如何将赔率转换为概率。如果你的赔率是4:1
,那么事件发生的概率是1/5==0.2
。如果你的赔率是.2:1
,那么事件发生的概率是5/6
(大约为.833)。一般来说,如果赔率为m:n
,则概率为n/(m+n)
现在,如果要模拟事件是否发生,需要获得介于0
和1
之间的随机浮点数,然后检查这是否小于事件的概率。您可以使用类似于mt_rand(01000)/1000的方法来获取0
和1
之间的随机数
示例:
$odds1 = 4; // 4:1
$prob1 = 1/($odds1+1); // 1/5
if( mt_rand(0,1000)/1000 <= $prob1 ) {
// event happened
}
$odds2 = .2; // .2:1
$prob2 = 1/($odds2+1); // 5/6
if( mt_rand(0,1000)/1000 <= $prob2 ) {
// event happened
}
$odds1=4;//4:1
$prob1=1/($odds1+1);//1/5
如果(百万兰特(01000)/1000如果你要投票赞成结束,至少给出一个评论/理由…这是一个编程逻辑问题,我看不出为什么应该结束。我问这个问题时做错了什么吗?=/概率是一个比率,比率可以表示为十进制,浮点数是十进制。只需进行计算:-)对,我在一定程度上理解数学逻辑,但是我不知道获得浮点(基本上是rand(0,1)值)@PRPG的正确语法-我认为你的问题很好