#include static void kst_split_aft( uint32_t* pAfloat, int32_t* exp, int64_t* mant, int32_t* sign) { uint32_t uAft = *pAfloat; *exp = (uAft >> 25) & 0x3F; *mant = uAft & 0x1FFFFFF; *sign = uAft >> 31; if (*exp || *mant) { *mant |= 1 << 25; } } static void kst_aft_to_dbl( void* pDouble, void* pAfloat) { uint64_t uDbl; int32_t exp; int32_t sign; int64_t mant; kst_split_aft((uint32_t*)pAfloat, &exp, &mant, &sign); if (exp || mant) { uDbl = ((uint64_t)sign << 63) | ((uint64_t)(exp + (1023 - (1 << 5))) << 52) | ((uint64_t)(mant & ((1 << 25) - 1)) << (52 - 25)); } else { uDbl = (uint64_t)sign << 63; } *((uint64_t*)pDouble) = uDbl; } void kst_float_to_q15_vector( void* pDst, void* pSrc, uint32_t elCnt) { uint32_t* pSrcT; int16_t* pDstT; uint32_t idx; double smp; pSrcT = (uint32_t*)pSrc; pDstT = (int16_t*)pDst; for (idx = 0; idx -32768.0) ? ((int16_t)smp) : -32768) : 32767); } } void kst_float_to_IEEE_float( void* pDst, void* pSrc) { double dst; kst_aft_to_dbl(&dst, pSrc); *((float*)pDst) = (float)dst; }