public ScoringResult Calculate(double boardStartingRating, double winnerRating, double loserRating, bool tie = false) { //http://en.wikipedia.org/wiki/Elo_rating_system //http://www.chess-mind.com/en/elo-system var winnerK = CalculateKFactor(boardStartingRating, winnerRating); var loserK = CalculateKFactor(boardStartingRating, loserRating); var eW = 1 / (1 + Math.Pow(10, (loserRating - winnerRating) / F)); var eL = 1 / (1 + Math.Pow(10, (winnerRating - loserRating) / F)); var results = new ScoringResult(); if (!tie) { results.WinnerDelta = Math.Round(winnerK * (1 - eW)); results.LoserDelta = Math.Round(loserK * (0 - eL)); } else { results.WinnerDelta = Math.Round(winnerK * (.5 - eW)); results.LoserDelta = Math.Round(loserK * (.5 - eL)); } return(results); }
public ScoringResult Calculate(double boardStartingRating, double winnerRating, double loserRating, bool tie = false) { //http://en.wikipedia.org/wiki/Elo_rating_system //http://www.chess-mind.com/en/elo-system var winnerK = CalculateKFactor(boardStartingRating, winnerRating); var loserK = CalculateKFactor(boardStartingRating, loserRating); var eW = 1 / (1 + Math.Pow(10,(loserRating - winnerRating)/F)); var eL = 1 / (1 + Math.Pow(10,(winnerRating - loserRating)/F)); var results = new ScoringResult(); if (!tie) { results.WinnerDelta = Math.Round(winnerK * (1 - eW)); results.LoserDelta = Math.Round(loserK * (0 - eL)); } else { results.WinnerDelta = Math.Round(winnerK * (.5 - eW)); results.LoserDelta = Math.Round(loserK * (.5 - eL)); } return (results); }