许多mcu 芯片只支持整数运算,如果要在这些芯片上进行小数运算,定点运算应该是最佳选择了;此外即使芯片支持浮点数,定点小数运算也是最佳的速度选择。所谓定点小数运算,就是将小数点位置固定,用整数的方式来进行运算;由于小数点的位置是固定的,所以就没有必要储存它。既然没有储存小数点的位置,那么计算机当然就不知道小数点的位置,所以这个小数点的位置是我们写程序的人自己需要牢记的。那么,如何将小数表示成整数呢?
处理器整数以二进制形式存储,首先要了解如何将小数转换成二进制!假定mcu 是16位,因最高位是符号位,那么有效位就只有15位(不考虑符号则16位)。即小数点之后可以有0~15 位。我们把小数点之后有n位叫做qn,例如小数点之后有12位叫做q12 格式的定点小数,而q0就是我们所说的整数:
以q12 格式为例,q12 的正数的最大值是0111.111111111111,第一个0是符号位,后面的数都是1,那么这个数是十进制的多少呢? 请看下面的运算:
对于qn格式的定点小数的表达的数值就它的整数值除以2^qn。在计算机中还是以整数来运算,我们把它想象成实际所表达的值的时候,进行这个运算。反过来把一个实际所要表达的值x 转换qn 型的定点小数的时候,就是x*(2^ qn)了。例如0.2 的q12 型定点小数为:0.2*(2^12) =819.2,由于这个数要用整数储存, 所以是819 即0x0333。因为舍弃了小数部分,所以0x0333 不是精确的0.2,实际上它是819/2^12=0.199951171875,非常接近0.2 了。
因此我们可以归纳出一个公式,假定x 表示实际的小数, q表示这小数在mcu 中的qn 型定点小数,则有:
由以上公式我们可以很快得出定点小数运算法则:
加减法和一般的整数运算相同,而乘除法的时候,为了使得结果的小数点位不移动,对数值进行了移动(乘除2^qn实际是将被乘除数左或右移动n位):
q3 = q1 * q2 / (2^qn) ---> q3 = (q1 * q2 )>>qn
用c语言来写定点小数的乘法就是:
short q1,q2,q3;
....
q3=((long q1) * (long q2)) >> n;
由于/ 2^qn 和* 2^qn可以简单的用移位来计算,所以定点小数的运算比浮点小数要快得多。下面我们用一个例子来验证一下上面的公式:用q12来计算2.1 * 2.2,先把2.1, 2.2转换为q12 定点小数:
2.1 * 2^12 = 8601.6 = 8602
2.2 * 2^12 = 9011.2 = 9011
(8602 * 9011) >> 12 = 18923
18923 的实际值是18923/(2^12) = 4.619873046875 和实际的结果4.62相差0.000126953125,对于一般的计算已经足够精确了。好了,话不投机半句多,说了这么多,最终还是要用实例代码来形象的指出如何实现定点运算。
mcu 实例
用硕呈16bit-mcu 实现一组数据乘以0.492,这组数据是:
100*0.492=49.2
105*0.492=51.66
147*0.492=72.324
350*0.492=172.2
860*0.492=423.12
458*0.492=225.336
步骤一,先确定小数,0.492属于小于“1”的小数;且乘数与被乘数符号都为正,为了提高精度,可以考虑使用q16 格式;因此将0.492转换成定点小数有:
步骤二,编写如下代码:
在地址0x00f0 处,设定运算为无符号乘以无符号运算。
地址0x00f1 处,将q16 小数送入mx 寄存器。
地址0x00f4~0x00f8 处,利用循环计算出_mul_表格中列出的数据,并将结果存到i0指向的缓冲中(mr1 是计算结果的整数位,mr0 是计算结果的小数低位)。
计算结果请查阅以下表格:
如果运算不需要小数部分(即运算结果取整),则mcu 运算结果中的数值均需要向右移动16位去掉小数部分;在代码中,用户可以直接取mr1的数字做为整数结果(假如不考虑四舍五入)。
真正的“Grow Getter”?还是与业务增长失之交臂
用于运动控制和驱动的系统设计
如何用FPGA实现CAN总线通信控制器
盘点下市场上USB接口分类
3D打印技术在航空领域的应用,未来航空业的新面貌
FOC之定点小数运算
32位单片机STM32F7外扩QSPI SRAM芯片
4G标准:TD-LTE规模试验进入第二阶段
高云半导体与Rutronik GmbH打造分销联盟
华为郭平发表了题为“新基建、新经济、新发展”的致辞
可拉伸扩展的多功能集成电子皮肤
DMR对讲机TDD技术及TDD噪音问题怎么解决
功率放大器的基本要求
北汽携手Imagination打造网联车规级芯片,推动国内智能汽车产业发展
嵌入式ARM工业边缘计算机自带DI口
利用3G无线和有线网络组网实现视频监控的应用方案
华为的网络安全立场声明说了些什么?
军备芯片和商用芯片的区别 芯片14nm对比5nm差距在哪里?
整流变压器的发展方向_整流变压器型号参数
光纤激光打标机在珠宝行业的应用有哪些?