Olá Marcelo, achei seu código bem bonitinho mas só que ele tem aí um pequenho erro do cálculo em
var geracoes = anoAtual - chegadaPort / média
lembrando que as divisões e multiplicações sempre serão calculadas primeiro, então neste caso temos que colocar alguns parênteses entre (anoAtual - chegadaPort) e / media, ficando assim
var geracoes = (anoAtual - chegadaPort) / média
Alem disso, Math.round(geracoes) eu acredito que não adianta coloca-lo porque o resultado redondo pode estragar o resultado preciso, por exemplo: O resultado com o Math é 19, calculando 19 * 28 (media) = 532 + 1500 (chegada dos portuguêses) resultando o ano 2032! sem o Math o resultado seria 18.642857142857142 * 28 = 521.999 + 1500 = 2,022. É só minha opinão rsrsrs