Sugiro contar a diferença entre o valor do brilho atual e o valor a ser definido em cada etapa, dependendo da sobra para o máximo. Dessa forma, os erros de arredondamento não serão acumulados.
Com o valor máximo de literal da minha máquina, aqui está a demonstração:
$> cat tuner.sh
current=0
max=4437
for step in {0..19}; do
diff=$(echo "($max - $current) / (20-$step)" | bc )
current=$(echo "$current + $diff" | bc )
echo "$current / $max"
done
$> ./tuner.sh
221 / 4437
442 / 4437
663 / 4437
885 / 4437
1107 / 4437
1329 / 4437
1551 / 4437
1773 / 4437
1995 / 4437
2217 / 4437
2439 / 4437
2661 / 4437
2883 / 4437
3105 / 4437
3327 / 4437
3549 / 4437
3771 / 4437
3993 / 4437
4215 / 4437
4437 / 4437
Se a diferença for sempre a mesma, os erros serão adicionados:
$> cat badtuner.sh
current=0
max=4437
for step in {0..19}; do
diff=$(echo "$max / 20" | bc )
current=$(echo "$current + $diff" | bc )
echo "$current / $max"
done
$> ./badtuner.sh
221 / 4437
442 / 4437
663 / 4437
884 / 4437
1105 / 4437
1326 / 4437
1547 / 4437
1768 / 4437
1989 / 4437
2210 / 4437
2431 / 4437
2652 / 4437
2873 / 4437
3094 / 4437
3315 / 4437
3536 / 4437
3757 / 4437
3978 / 4437
4199 / 4437
4420 / 4437
Para essa recomendação, você deve ter um contador de passos armazenado para saber qual deve ser seu divisor atual para calcular a diferença.