[an error occurred while processing this directive]
Ответ вобщем, использовал norm()+
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

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

Отправлено andy_P 14 февраля 2006 г. 18:20
В ответ на: А обрабатывали ли вы специально overflow и underflow ? отправлено KPAH 14 февраля 2006 г. 11:05

Юзал нечто такое - к сожалению весь сорс дать не могу - продано :-)

//saturation - shall be applied after the normilization
inline void CFastFloat::saturate() const{

if(_abs(m_exp) < m_max_abs_exponent)
return;

//handle large numbers
if(m_exp > m_max_abs_exponent){
m_exp = m_max_abs_exponent;
if(m_mant < 0)
m_mant = -m_max_pos_mant;
else
m_mant = m_max_pos_mant;
}

//handle numbers smaller then machine precision - replace them with machine zero.
if((-m_exp) > m_max_abs_exponent){
m_exp = -m_max_abs_exponent;
m_mant = 0;
}

}
//normalization
inline void CFastFloat::normalize() const{
int same_bits;

//same bits excluding sign
same_bits = _norm((UWord32) m_mant << 16);
m_mant = (m_mant << same_bits);

m_exp -= same_bits;

if(m_mant == 0){
m_exp = -m_max_abs_exponent;
}

#ifndef FLT_SATURATION_OFF
saturate();
#endif
}

inline CFastFloat& CFastFloat::operator*=(const CFastFloat& x){
//sum exponents
m_exp += (x.m_exp + 15);
//mpy mantissa
m_mant = (short)_mpylir(m_mant,x.m_mant);
//normalize result
normalize();
return *this;
}


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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru