swRTC

lesto:
ma noi usiamo già 365.2422, quindi ne tieni già conto.

Non capisco perchè usi i float a questo punto, passa agli unsigned long direttamente.

per quanto riguarda il fatto che la funzione deve riconoscere il 2000, fai
if (anno%100 == 0) return '1'

Sì si usa 365.2422 però il problema è che a livello civile è che l'anno bisestile viene introdotto ogni 4 anni, quindi un anno dura 365.25. Ecco che l'arrotondamento viene fuori.
L'algoritmo basato sui float lo presi da internet però non era il sistema migliore, solo uno che funzionava.