The formulae to convert from one rating system to another have changed over the years in an attempt to make them more accurate.
The below formulae are mine, sometimes following official specs but occasionally altering slightly when deemed more accurate.
return unsigned((ecf * 7.5) + 700);
return unsigned((elo - 700) / 7.5);
if (elo <= 1886) return unsigned(elo/0.75) - 570; else if (elo <= 2000) return 180 + unsigned(0.94 * elo); else return 20 + unsigned(1.02 * elo);
If an event is known to be a youth event, such as the World Youth Championships, then the following conversion is used for all opponents:
if (elo <= 2000) return 560 + unsigned(0.74 * elo); else return 80 + unsigned(1.0 * elo);
if (uscf > 2060) return unsigned((uscf - 180) / 0.94); else if (uscf > 1945) return unsigned((uscf - 20) / 1.02); else return unsigned(0.75 * 570) + uscf;