Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Правильно будет спросить не про целочисленный вид, а про фиксированную запятую :-)

Отправлено -=ВН=- (193.125.71.140) 02 ноября 2011, г. 22:28
В ответ на: чет торможу. Реально накопление по формуле An += (3/16) * (An+1 - An) сделать в целочисленном виде? отправлено ы 02 ноября 2011, г. 16:38

Выбери правильно формат данных и вперед. Для 3/16 достаточно байта с форматом 1.7 - 1 разряд на целую часть, 7 на дробную. 3/16 запишутся как 24 =128*3/16. Для промежуточных, входных и окончательных данных - судя по твоему посту с примером ниже можно выбрать формат 16.16. Т.е. 16 разрядов на целую и 16 на дробную часть.

Осталось только написать правильное умножение 32-х разрядного числа в формате 16.16 на 8-ми разрядное число в формате 1.7. Сложение и вычитание чисел с фиксированной запятой в формате 16.16 ==сложению вычитанию 32-х разрядных целых. Перевод входных данных в формат 16.16 - сдвиг влево на 16 разрядов.
Умножение просто.
Число в формате 16.16 пусть будет A.

Тогда.
1) int32 B=A>>16.
2) int32 С=B*24.
3) C<<=9.
4) uint32 D=(uint32)(A&0xffff);
5) uint32 E=D*24;
6) E>>=7.
7) int32 RESULT=C+E.



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
умножьте 2 на три:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru