关于DSP除法运算,如果不需要特别高的精度,可以采用查找表的方式,优化除法运算。下面我们就研究一下如何采用查找表的方式加速除法运算。我们以32位单精度float类型除法为例来讲解。
FLOAT的内存结构格式
float一共32位,其结构定义如下:
|-------- 31 -------|------------ 30-23------------ |------------ 22-0 ------------|
符号位(sign) 指数部分(exp) 小数部分(mag)
sign:符号位就一位,0表示正数,1表示负数
exp: 指数部分,无符号正数
mag:小数部分,定点小数,小数点在最左边,表示范围:0 ≤ mag< 1。
float的表达式 : pow(-1, sign) * (1 + mag) * pow(2, exp - 127)
示例程序1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
intmain(int argc,char*argv[])
{
float f;
int i;
int sign;
int exp;
int mag;
float d_mag;
float f2;
f = 1.23;
//f = -0.12;
i = *(int*)&f;
sign = (i >> 31) & 0x01;
exp = (i >> 23) & 0xFF;
mag = i & 0x7FFFFF;