0

ESL ポータルのような ELO 式を実装しようとしています。( http://cheater.esl.eu/uk/faq/rankmodules/ )

最初の例は ESL の例に対応しますが、2 番目と 3 番目の例はおかしな結果になります。どこが間違っていますか?

    function eloEsl($k1, $k2, $g1, $g2)
{
    $per1 = $g1 / ($g1 + $g2);
    $per2 = $g2 / ($g1 + $g2);

    $E = 1/(1+ Pow(10, -($k1-$k2)/400)); 



    $Pts1 =  $k1 + 50 * ( $per1 - $E );
    $Pts2 =  $k2 + 50 * ( $per2 - $E );

    $Pts1 = round($Pts1);

    $Pts2 = round($Pts2);

    return array($Pts1, $Pts2);
}

// first test is similar to ESL example
eloEsl(1000, 1000, 3, 6); // returns  -8 / + 8

// This make crazy result !
eloEsl(1000, 1200, 5, 1); // returns  +30 / -4

// and reverse
eloEsl(1000, 1200, 1, 5); // returns  -4 / +30
4

1 に答える 1

0

期待される計算ポイント (変数 $E) は、両方のプレーヤーで同じではありません。したがって、$E1 と $E2 が必要です。

$E1 = 1/(1+ Pow(10, -($k1-$k2)/400)); 

$E2 = 1/(1+ Pow(10, -($k2-$k1)/400)); 
于 2012-06-01T00:37:59.840 に答える