Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 什么是最有效的方法,使和赔率系统?_Php_Math_Random_Probability - Fatal编程技术网

Php 什么是最有效的方法,使和赔率系统?

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可能已经是错误的 您可以在比较之前对数字进行四舍

我试图设计一个赔率系统,从1-100,但它也使用0-1的罕见赔率

有人告诉我应该使用浮点格式,但我不知道

基本上我有

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的正确语法-我认为你的问题很好