浮点数转换为Q格式,
(1)根据浮点数的数值范围确定选用哪一种Q格式,以下为Q格式对应的范围,
Q15 | -1≤x≤0.9999695 |
Q14 | -2≤x≤1.9999390 |
Q13 | -4≤x≤3.9998779 |
Q12 | -8≤x≤7.9997559 |
Q11 | -16≤x≤15.9995117 |
Q10 | -32≤x≤31.9990234 |
Q9 | -64≤x≤63.9980469 |
Q8 | -128≤x≤127.9960938 |
Q7 | -256≤x≤255.9921875 |
Q6 | -512≤x≤511.9804375 |
Q5 | -1024≤x≤1023.96875 |
Q4 | -2048≤x≤2047.9375 |
Q3 | -4096≤x≤4095.875 |
Q2 | -8192≤x≤8191.75 |
Q1 | -16384≤x≤16383.5 |
Q0 | -32768≤x≤32767 |
(2)浮点数转换为Q格式
根据确定Q格式,如数0.866为Q15,转换为Q15格式只需乘2的15次方。
例如:假设数据存储空间为2个字节,0.333×2^15=10911=0x2A9F,0.333的所有运算就可以用0x2A9F表示,同理10911×2^(-15)=0.332977294921875,可以看出浮点数据通过Q格式转化后是有误差的。
Q15数据转化为浮点数据,将数据除以2^15。
Q格式的运算
1> 定点加减法:须转换成相同的Q格式才能加减
2> 定点乘法:不同Q格式的数据相乘,相当于Q值相加,即Q15数据乘以Q10数据后的结果是Q25格式的数据
3> 定点除法:不同Q格式的数据相除,相当于Q值相减
4> 定点左移:左移相当于Q值增加
5> 定点右移:右移相当于Q减少
移位:做移位运算之前需要保证,每一次运算的Q格式结果,同时还需要随时调整数据的Q格式,方便下一次运算,保证不会产生溢出。
---------------------
来源:优快云
原文:https://blog.youkuaiyun.com/HengZo/article/details/50255563