Страница 1 из 1

Использование Float в AVR

Добавлено: 08 янв 2023, 18:15
Ingwar
Для кого-то информация давно известна.
Ну а для тех кто не любит читать довожу до сведения - использование математических операций с переменными типа Float на 8ми битных камнях AVR чревато "нежданчиками" :smile110:

Использование Float в AVR

Добавлено: 08 янв 2023, 18:27
artemka19
пример бы не помешал)

Использование Float в AVR

Добавлено: 08 янв 2023, 18:49
Naladchik
Ingwar писал(а): 08 янв 2023, 18:15 ... на 8ми битных камнях AVR чревато "нежданчиками"
По поводу нежданчиков любопытная информация попалась на сайте Гайвера.
... Если при умножении или делении в текущем действии результат превысит 32768 – ячейка переполнится и мы получим некорректный результат. Для исправления ситуации нужно .... ".
Сам не проверял, за достоверность не ручаюсь, но как информацию для размышлений для себя принял.

Использование Float в AVR

Добавлено: 08 янв 2023, 19:09
Ingwar
artemka19 писал(а): 08 янв 2023, 18:27 пример бы не помешал)
Выкладывать проект, на котором "споткнулся" не буду, поскольку не искал в нем локальное проблемное место.
Просто опишу - делал дозирующий насос с калибровкой по прокачиваемому продукту и результат фактического дозирования отличался от заданного до и выше 10%. Большая часть математики была на флоат. И да, вычисления производились не в каждом цикле, а только однократно по вызову в настройках :smile38: . Так вот, переход на целые числа сходу изменил погрешность дозирования до 0,3%.
Ну и погуглить про Float без FPU не трудно.
Самое простое описание.

Использование Float в AVR

Добавлено: 08 янв 2023, 19:26
RedSky
Naladchik писал(а): 08 янв 2023, 18:49 Если при умножении или делении в текущем действии результат превысит 32768
Это он о типе int.
Float не рекомендуется сравнивать на ==, >=,<=. Но это не только в avr.