Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Арифметика с фиксированной точкой на AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Proton
Возникла необходимость реализации решения дифферинциальных уравнений для автоматической системы управления. Чтобы получить приемлимую точность, надо использовать дробные числа, реализация плавающей точки в IAR'овской библиотеке оказался слишком ресурсоёмким. Интересным показался вариант в AVR201, но там для целой части используется всего 1 бит, чего мне явно недостаточно.
Подскажите где можно посмотреть примеры реализации операций с фиксированной точкой, где хотя бы 1 байт отведён на целую часть, т.е. имеет формат не хуже 8.16(1 байт на целую часть, 2 байта на дробную).
=GM=
Цитата(Proton @ Feb 17 2007, 07:07) *
Возникла необходимость реализации решения дифферинциальных уравнений для автоматической системы управления. Чтобы получить приемлимую точность, надо использовать дробные числа, реализация плавающей точки в IAR'овской библиотеке оказался слишком ресурсоёмким. Интересным показался вариант в AVR201, но там для целой части используется всего 1 бит, чего мне явно недостаточно.
Подскажите где можно посмотреть примеры реализации операций с фиксированной точкой, где хотя бы 1 байт отведён на целую часть, т.е. имеет формат не хуже 8.16(1 байт на целую часть, 2 байта на дробную).

Виртуальная точка в целочисленных операциях, по определению стоит после самого младшего разряда, но её можно поставить где угодно, сиё зависит от интерпретации входных чисел и результата, вот вам и будет операция с фиксированной точкой. Естественно, нужно учитывать перемещение точки при умножении и делении. Например, при умножении чисел 1,23 и 4,56 получим результат 5,6088. Видно что у множителей точка стояла перед второй позицией в числе, а в произведении она стоит после четвёртой позиции.

В вашем конкретном случае можно работать с входными числами вида <byte1>.<byte0>, и выходными <byte2>.<byte1><byte0>. Сохраняя <byte2>.<byte1> в промежуточных вычислениях с возможным округлением. Теоретически можно так делать.

А вот практически так делать не надо, просто работаете с целочисленными 24-битными значениями, а при интерпретации помните, что единица младшего разряда ваших чисел равна 1/(2^16), что эквивалентно тому, что точка у вас стоит перед 16-м разрядом. Таким образом, вам подойдут один к одному все целочисленные алгоритмы.

На сайте атмел еще посмотрите avr202 (http://www.atmel.com/dyn/resources/prod_documents/doc0937.pdf).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.