http://en.wikipedia.org/wiki/Elo_rating_system Code (c++): QPair<int, int> MemberRating::pointChangeEstimate(int opponent_rating) { int n = matches; int kfactor; if (n <= 5) { static const int kfactors[] = {100, 90, 80, 70, 60, 50}; kfactor = kfactors[n]; } else { kfactor = 32; } double myesp = 1/(1+ pow(10., (float(opponent_rating)-rating)/400)); /* The +0.5 is a trick to round the value instead of flooring it */ return QPair<int,int>(int((1. - myesp)*kfactor+0.5),-int(myesp*kfactor +0.5)); } (1. - myesp) * kfactor is what you get if you win, myesp*kfactor is what you lose if you lose. myesp is 1/(1 + 10^((opponent_rating-rating)/400)) kfactor is generally 32, except for first matches where it's higher.