3

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

我注意到的一件事是它不包括加、减、乘或除函数。

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

4

2 回答 2

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

。结尾

记得包含 libq.h

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

于 2015-06-25T19:59:05.853 回答
0

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

于 2010-12-06T17:09:37.263 回答