DEFAULT_C * $this->DEFAULT_C * \max(0, $matchDate - $lastMatchDate) ), $this->MIN_RD ) ); // Step 2: foreach ($oElo as $id => $e) { $gRD_t = 1 / (\sqrt(1 + 3 * self::Q * self::Q * $oRd[$id] * $oRd[$id] / (\M_PI * \M_PI))); $gRD[] = $gRD_t; $E[] = 1 / (1 + \pow(10, $gRD_t * ($eloOld - $e) / -400)); } $d = 0; foreach ($E as $id => $_) { $d += $gRD[$id] * $gRD[$id] * $E[$id] * (1 - $E[$id]); } $d2 = 1 / (self::Q * self::Q * $d); $r = 0; foreach ($E as $id => $_) { $r += $gRD[$id] * ($s[$id] - $E[$id]); } $r = $eloOld + self::Q / (1 / ($RD * $RD) + 1 / $d2) * $r; // Step 3: $RD_ = \sqrt(1 / (1 / ($RD * $RD) + 1 / $d2)); return [ 'elo' => (int) \max((int) $r, $this->MIN_ELO), 'rd' => (int) \max($RD_, $this->MIN_RD) ]; } }