How ELO Rating Works in Gammon42 Backgammon
How Gammon42 calculates your backgammon ELO since version 1.3.1: the exact formula, the K-factor, the doubling cube and what changed, with the code.
Your ranked rating in Gammon42 is an ELO number. Every player starts at 1500. After each ranked game the winner gains points and the loser drops points. How many depends on three things: the rating gap between you, how high the doubling cube went and, since version 1.3.1, how many ranked games you played in the last 7 days. Beat an equal opponent and you win +16. Beat a much stronger player and you win more. Beat a much weaker one and you win less. Gammons and backgammons don’t change your rating at all.
That’s the short version. Below is the full arithmetic as it works since version 1.3.1 (October 2026), the numbers we chose, why we changed them twice, and the actual code. We’d rather show you the math than ask you to trust it.
Which games count toward your ELO
- Ranked games: yes. Your ELO only moves in ranked games.
- Boosted games: no. Boosted games (called Casual before version 1.3.0) earn points for the Boosted leaderboard and Sparks, but they never touch your ELO.
- Tournaments: the games inside a tournament don’t change your ELO. Public tournaments award a flat ELO prize to the podium instead, for example +50, +25 and +15. More on that in our tournaments post.
Step 1: how likely were you to win?
Before we can say how much a win is worth, we estimate how likely it was. That’s the expected score, a number between 0 and 1:
expected = 1 / (1 + 10^((opponent rating − your rating) / 1200))
If you’re rated the same as your opponent, the expected score is 0.5: a coin flip. The higher you are above them, the closer it gets to 1.
| Rating gap | Favourite’s expected win rate |
|---|---|
| 0 | 50.0% |
| 50 | 52.4% |
| 100 | 54.8% |
| 150 | 57.1% |
| 200 | 59.5% |
| 300 | 64.0% |
| 400 | 68.3% |
| 500 | 72.3% |
Step 2: how far did the result beat the forecast?
Then we compare what happened with what was expected:
change = K × (result − expected)
result is 1 for a win and 0 for a loss. K is the K-factor: the largest change a single game can produce (before the cube, see below). For most players K is 32. We round to a whole number.
Two players at 1500: expected score 0.5. The winner gets 32 × (1 − 0.5) = +16, the loser gets −16.
Here’s what that looks like across rating gaps, with K at 32 and the cube at 1:
| Rating gap | Favourite wins | Underdog wins |
|---|---|---|
| 0 | +16 / −16 | +16 / −16 |
| 100 | +14 / −14 | +18 / −18 |
| 200 | +13 / −13 | +19 / −19 |
| 300 | +12 / −12 | +20 / −20 |
| 400 | +10 / −10 | +22 / −22 |
The logic is simple: an upset is worth more than an expected win. If you’re 200 points above your opponent, you need to win about 60% of your games against them just to stay level. Win more often than that and you climb. Win less often and you drop, even though you win most of your games.
Step 3: how much did you play this week?
This step is new in version 1.3.1. Before each ranked game is scored, the server counts how many ranked games each player has played in the last 7 days:
- Fewer than 50 games: K is 32.
- 50 games or more: K is 16. Every change, up or down, is half as large.
| Rating gap | K = 32 (favourite wins / loses) | K = 16 (favourite wins / loses) |
|---|---|---|
| 0 | +16 / −16 | +8 / −8 |
| 150 | +14 / −18 | +7 / −9 |
| 300 | +12 / −20 | +6 / −10 |
Why? The size of a rating swing over a week is roughly K times the number of games played. Some players play 300 ranked games in a week. At K = 32, being just 2 or 3 percentage points below the expected win rate over that many games, which is well within normal luck, cost them around 200 points in a single week. Halving K for those players keeps a heavy week about as volatile as a normal one. Players who play less keep the full K and climb as fast as before.
Three details:
- Each player has their own K. The count is made separately for the winner and for the loser.
- The two changes are not always mirror images any more. If you have played 60 ranked games this week and your equally rated opponent has played 10, a win gives you +8 while they lose −16. If they win, they gain +16 and you lose −8. When both players have the same K, the winner still gains exactly what the loser drops.
- The window moves with you. It is always the 7 days before the game being scored, and that game itself is not counted. When your count drops under 50, you’re back at K = 32.
Why we divide by 1200, not 400
Chess ELO divides by 400. That’s where our rating started. We changed it to 800 in version 1.2.0 and to 1200 in version 1.3.1.
The number decides how sure the system is that the stronger player will win. With 400, a 200-point favourite is expected to win 76% of the time. In chess that’s reasonable. In a single game of backgammon it’s far too confident, because the dice give the weaker player real chances in every game. Even a much stronger player loses plenty of single games to luck.
The result was a rating that punished good players. With 400, a player 300 points above their opponent won +5 for a win and lost −27 for a loss. To stay level they needed to win 85% of those games, which is almost impossible in backgammon.
In 1.2.0 we moved to 800, which halved the slope. It helped, but it wasn’t enough. After a few weeks of ranked games we compared the curve with real results. Our strongest players were winning 57 to 58% of their games, while the curve expected about 60% from them. So they were still losing rating while winning most of their games, and the ladder stayed squeezed: half of the active players were within about 60 points of each other.
With 1200, the curve matches what the dice actually allow:
| 300-point favourite | Before 1.2.0 (÷400) | 1.2.0 to 1.3.0 (÷800) | Since 1.3.1 (÷1200) |
|---|---|---|---|
| Expected win rate | 84.9% | 70.3% | 64.0% |
| Points for a win | +5 | +9 | +12 |
| Points for a loss | −27 | −23 | −20 |
For reference, FIBS, the oldest backgammon server, goes even further and uses 2000 for single-point matches. With our K-factor of 32 that would stretch the ladder past 3000 points, so we stopped at 1200.
We did not recalculate past games. The new formula applies to ranked games played after the change, and your rating carried over as it was.
The doubling cube: higher stakes, but capped
A game played for a higher cube should count for a bit more, but it shouldn’t let one lucky game rewrite your rating. So the cube multiplies your ELO change by a coefficient between 1.0 and 2.0. Each doubling adds one sixth of the way to the maximum:
coefficient = 1 + log2(cube) / 6
| Cube | Coefficient | Two players at 1500, K = 32 | Two players at 1500, K = 16 |
|---|---|---|---|
| 1 | 1.00 | ±16 | ±8 |
| 2 | 1.17 | ±19 | ±9 |
| 4 | 1.33 | ±21 | ±11 |
| 8 | 1.50 | ±24 | ±12 |
| 16 | 1.67 | ±27 | ±13 |
| 32 | 1.83 | ±29 | ±15 |
| 64 | 2.00 | ±32 | ±16 |
Even at the maximum cube of 64, the swing is at most double the normal one. Before version 1.0.5, the cube multiplied points directly, and a single high-cube game could move a rating by far more than it deserved. The cube still matters, which keeps take-or-pass decisions meaningful, but who you beat and whether you won still matter much more.
Why gammons and backgammons don’t count
A gammon is worth 2 points on the scoreboard and a backgammon 3, and in Gammon42 they still earn you more points in the results. But your rating doesn’t care. ELO measures one thing: how often you beat players of a given strength. A gammon is a bigger win, but it’s still one win. Early versions of Gammon42 gave extra ELO for gammons, and that mostly rewarded risky, lucky games instead of consistent play. Since 1.0.5 only the win, the opponent’s rating and the cube count.
Forfeits, disconnections and the move timer
A ranked game that ends early still counts. If you resign, leave, lose your connection for too long or run out of time on 3 moves, the game is scored as a normal loss at the cube value on the board at that moment. The app warns you about this before you resign. That rule exists for fairness: otherwise quitting a losing game would be a free way to protect your rating.
The actual code
This is the code our game server runs after every ranked game (Go):
const K = 32 // maximum change per game, before the cube
const HeavyVolumeK = 16 // K for players with a heavy ranked week
const HeavyVolumeGames = 50 // ranked games in the window that switch K
const HeavyVolumeWindow = 7 * 24 * time.Hour
const Divisor = 1200 // chess uses 400; dice make single games less predictable
const Starting = 1500
func KFor(recentRankedGames int) int {
if recentRankedGames >= HeavyVolumeGames {
return HeavyVolumeK
}
return K
}
func CalculateChangeWithK(winnerELO, loserELO, winnerK, loserK int, coefficient float64) Change {
expectedWinner := expectedScore(winnerELO, loserELO)
expectedLoser := 1 - expectedWinner
return Change{
Winner: int(math.Round(float64(winnerK) * (1 - expectedWinner) * coefficient)),
Loser: int(math.Round(float64(loserK) * (0 - expectedLoser) * coefficient)),
}
}
func expectedScore(playerELO, opponentELO int) float64 {
return 1.0 / (1.0 + math.Pow(10, float64(opponentELO-playerELO)/Divisor))
}
coefficient is the cube multiplier from the table above. winnerK and loserK come from KFor, with each player’s ranked games from the last 7 days.
Notice what the code doesn’t take: no win streak, no country, no purchases, no hidden “balancing”. The only inputs are the two ratings, the cube and how many ranked games each player played this week. Same principle as our dice: if it’s not in the formula, it doesn’t affect you.
ELO rating FAQ
What ELO do I start with in Gammon42?
Every new player starts at 1500.
How many ELO points do I get for a win?
Against an opponent with the same rating, +16 at cube 1. More if your opponent is rated higher than you, less if they are rated lower. A higher doubling cube raises the change, up to double at cube 64. If you have played 50 or more ranked games in the last 7 days, all your changes are halved.
Why did I win fewer points than my opponent lost?
Because one of you has played 50 or more ranked games in the last 7 days. That player’s rating moves half as much per game, for wins and for losses. The other player’s change is not affected.
Do gammons and backgammons give more ELO?
No. They are worth more points in the results, but your ELO only depends on the win, your opponent’s rating and the cube value.
Do Boosted games affect my ELO?
No. Only ranked games change your ELO. Boosted games earn points for the Boosted leaderboard and Sparks.
What happens to my ELO if I resign or disconnect?
A ranked game that ends early is scored as a normal loss, at the cube value at that moment.
What changed in the ELO formula in version 1.3.1?
Two things. The divisor in the formula went from 800 to 1200, so favourites are expected to win less often and lose fewer points for a loss. And players with 50 or more ranked games in the last 7 days now use a K-factor of 16 instead of 32.
Questions about your rating, or an idea to make it fairer? Write to us at support@table-online.ro.
Play a ranked game and put the math to the test →
Prefer an app? Get Gammon42 on the App Store or Google Play.
Ready to play?
Play Now