Using atan for win chance system

Backstory

So I’m introducing a 1v1 card battle feature into my game, where basically cards at different ratings (highest: 99, lowest: 57), where 1 player puts a card against another player’s, and whoever has the better card rating would win by a certain percent.

Basically the gist is, when two cards have the same rating, I want there to be a 50% win chance for both of them, otherwise I want there to be a win chance based on the difference in rating.

Obviously I wanted an asymptotic equation so that the max win chance could be somewhere in the 90s (90% - 99%) and the lowest could be something like 1% - 9%.

So my idea was to use arctan since it was easily maneuverable, but I wanted to see what other models people (who made a win chance system) used, and also as a side question, am I overlooking a simple solution?

And here’s my current equation that I’m using:

local function getWinChanceFromRatingDifference(ratingDiff : number)
	local chance = 50 * (2 / math.pi) * math.atan(1/8 * ratingDiff) + 50
	return chance
end

logistic growth function might be more efficient because it comes with the point (0, 0.5) by default

this function is 1 / ( 1 + e ^ (-5x) )

edit: e^x is supposed to be faster than trig functions and theres also math.exp built in

image

I don’t know why I looked over the logistic model, yeah I feel like it’s just a more efficient solution overall, especially since I was looking right at it, but thanks.

Think I will switch over to that.