double
Тип double на платах с ATMEGA совпадает с double и даёт те же 4 байта — полноценная 64-битная точность доступна только на float.
Полная статья
Описание
double — тип данных для чисел с плавающей запятой. В большинстве языков программирования он занимает 8 байт и обеспечивает двойную точность по сравнению с float. Однако на платах Arduino с микроконтроллером ATMEGA (Uno, Nano, Mega и другие) double занимает те же 4 байта, что и float, и ведёт себя абсолютно идентично: никакого прироста точности нет.
Исключение — Arduino Due: там double реализован честно, как 64-битное число (8 байт), и обеспечивает значительно большую точность вычислений.
Синтаксис
double var = val;
Параметры
var: имя переменнойval: значение, которое нужно присвоить переменной
Практические замечания
- На платах с ATMEGA разница между
floatиdoubleотсутствует: оба типа дают одинаковую точность примерно 6–7 значащих цифр. - Если вы переносите код с ПК или из среды, где
doubleдействительно 64-битный, результаты вычислений на ATMEGA-плате могут отличаться от ожидаемых — особенно при работе с очень маленькими или очень большими числами. - На Arduino Due
doubleполноценный: 64 бита, ~15–16 значащих цифр. Если точность критична, выбирайте соответствующую платформу осознанно. - Арифметика с плавающей запятой на ATMEGA выполняется программно и работает заметно медленнее целочисленной. Если в проекте важна скорость, стоит оценить, можно ли обойтись целыми числами или фиксированной точкой.
- При отладке выводите значения через
Serial.print()— по умолчанию он показывает два знака после запятой. Чтобы увидеть больше цифр, используйтеSerial.print(val, 6).
На что обратить внимание
Если вы копируете код из интернета, книг или проектов, написанных под другие платформы, и в нём используется double — проверьте, не рассчитывает ли автор на повышенную точность. На ATMEGA-платах такой код скомпилируется без ошибок, но точность останется такой же, как у float. Это может привести к незаметным погрешностям в вычислениях, которые сложно отловить без явной проверки результатов.
Где применяется
- Математические вычисления, где нужны дробные числа: расчёт температуры, напряжения, угла поворота.
- Совместимость с библиотеками или кодом, написанным для других платформ, где тип
doubleиспользуется по умолчанию. - Проекты на Arduino Due, где действительно требуется 64-битная точность: научные измерения, навигация, точные физические расчёты.