定点算术

时间:2010-12-05 00:21:58

标签: fixed-point

我目前正在使用Microchip的定点库,但我认为这适用于大多数定点库。它支持Q15和Q15.16类型,分别支持16位和32位数据。

我注意到的一件事是它不包括加,减,乘或除功能。

我该怎么做?它是否只是使用整数数学加/减/乘/除它们一样简单?我可以看到加法和减法有效,但乘法或除法不会处理小数部分......?

2 个答案:

答案 0 :(得分:1)

Microsoft库包含用于添加和减少处理下溢/溢出的函数(_Q15add和_Q15sub)。

乘法可以作为汇编函数实现(我认为代码很好 - 这是来自内存)。

C调用原型是:

extern _Q15 Q15mpy(_Q15 a, _Q15 b);

例程(放在项目中的.s源文件中)是:

.global _Q15mpy
_Q15mpy:
mul.ss w0, w1, w2        ; signed multiple parameters, result in w2:w3
SL w2, w2            ; place most significant bit of W2 in carry
RLC w3, w0           ; rotate left carry into w3; result in W0
return                        ; return value in W0

.END

请记住包含libq.h

该例程在结果上执行左移一位而不是右移15位。没有溢出问题,因为Q15数字的大小始终<= 1。

答案 1 :(得分:0)

事实证明,由于数字的表示方式,所有基本算术函数都是使用本机运算符执行的。例如divide使用/运算符并乘以*运算符,这些编译为简单的32位除法和乘法。