В том что это 8-битный контроллер и операции с плавающей точкой на семействе AVR Atmel выполняются с погрешностью. Посмотрите код деления double на double в ассемблере или поверьте на слово, оперируя float/double вы получите погрешность, даже с меньшим количеством знаков перед/после запятой, проявляющуюся случайно. Если вам требуется повышенная точность, используйте int, где то там была библиотека, реализующая хранение float в двух переменных int и операции с ним