[an error occurred while processing this directive]
А обрабатывали ли вы специально overflow и underflow ?
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено KPAH 14 февраля 2006 г. 11:05
В ответ на: Ответ+ отправлено andy_P 13 февраля 2006 г. 18:30

Я сначала не хотел делать, но потом всё равно понадобилось для реализации тригонометрии и тому подобного... Стало помедленнее, но все равно на сложениях/умножениях/делениях раз так в 5 побыстрее чем на встроенной эмуляции флоатов. При этом точность у меня всё-таки 22 бита против 23 у флоата (если старшую 1 в нормализованном представлении не считать). На самом деле меня больше всего интересует как лучше сделать выравнивание порядков для сложения, коррекция экспонент (нормализация результата) итп. с помощью intrinsic...

Вот например моё умножение:

inline CAFloat operator * (const CAFloat& y) const
{
int cx = _clr(x, 0, 23);
int cy = _clr(y.x, 0, 23);
int resexp = _clr(_sadd2(cx, cy) + 0x01000000, 0, 23);

int min = _min2(_min2(cx, cy), resexp);
if(_clr(min, 0, 24)==0x80000000)
return CAFloat(min);

int mx = _extr(x, 0x100);
int my = _extr(y.x, 0x100);
int mant = ((_mpyhir(mx, my)) + (_mpyluhs(mx, my)>>15));
int norm = _norm(mant);
resexp -= (norm<<24) & (norm-31);
return CAFloat(_extu(mant, norm, 8) + resexp);
}


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru