реклама на сайте
подробности

 
 
> Арифметика с фиксированной точкой на AVR, Где взять примеры?
Proton
сообщение Feb 17 2007, 10:07
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334



Возникла необходимость реализации решения дифферинциальных уравнений для автоматической системы управления. Чтобы получить приемлимую точность, надо использовать дробные числа, реализация плавающей точки в IAR'овской библиотеке оказался слишком ресурсоёмким. Интересным показался вариант в AVR201, но там для целой части используется всего 1 бит, чего мне явно недостаточно.
Подскажите где можно посмотреть примеры реализации операций с фиксированной точкой, где хотя бы 1 байт отведён на целую часть, т.е. имеет формат не хуже 8.16(1 байт на целую часть, 2 байта на дробную).


--------------------
Всяк хорошая мысля к нам приходит опосля.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 1)
=GM=
сообщение Feb 17 2007, 20:00
Сообщение #2


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(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).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 14:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01301 секунд с 7
ELECTRONIX ©2004-2016