Second of all, 12 seconds on 3600 is about 0.33(1/3)% failure, seems right by me.
The millis() and micros() functions have a pretty good accuracy, but not 100%. In your function, it has an accuracy of 99.67% which is pretty much what you can get from an arduino without external RTC or web-based time.
It is not slow. It is just not running at exactly 16 MHz and over a long period of time the error becomes noticeable compared to the greater accuracy of a clock.
YemSalat:
What's your Serial speed, I bet it slows you down.
Has no effect on millis(), only how often the sketch prints the time.
Stefranz, you could tune those dividers you use to reflect the true speed of your CPU.
I think you would have to calculate hours and true remainder to get minutes then seconds, but you can be within millis per day as long as the board temperature is stable. Hey with the on-chip thermometer you might even be able to get around warming/cooling changing the resonator.
If you make your own breadboard duino you can use a crystal, have a clock and keep your dev board too.
But before we go on and on on how to fix the timing, i'd like to ask @Stefranz if it is necessary? Was the OP's question a problem or just something he/she liked to know?