_IQ26rsmpy(_IQ26(3.0268),20);这个表达式运算的结果是61;
问题:这个61是个什么结果是IQ26吗?还是IQ13?还是就是3.0268 * 20 = 60.536的四舍五入?为什么呢?没人会吗
Susan Yang:您可以看一下C2000ware安装文件夹内的文档
C2000Ware_2_00_00_02/libraries/math/IQmath/c28/docs/IQmath_Quickstart.pdf
This function multiplies two IQ number with rounding and saturation. In cases where the calculation may possibly exceed the range of the IQ variable, then this operation will round and then saturate the result to the maximum IQ value range before storing.
四舍五入的饱和处理乘法,该函数的input是两个IQ类型的数据
Let us assume that we use IQ26 are GLOBAL_Q format. This means that the range of the numbers is approximately [-32.0, 32.0]
Example :
Compute Y = M*X in IQ26 format with rounding and saturation. _iq26 Y, M, X;
M=_IQ26(-10.9);// M=-10.9
X=_IQ26(4.5);// X=4.5
Y = _IQ26rmpy(M,X);// Y= -32.0, saturated to MIN
_IQ26rsmpy(_IQ26(3.0268),20);这个表达式运算的结果是61;
问题:这个61是个什么结果是IQ26吗?还是IQ13?还是就是3.0268 * 20 = 60.536的四舍五入?为什么呢?没人会吗
user1832931:
回复 Susan Yang:
文档是这么说,,,但看别人的程序就有向提问题那样用的,,,,,我试了好几个参数,得出来的结果正好就是 浮点数乘以整数四舍五入的结果。
_IQ26rsmpy(_IQ26(3.0268),20);这个表达式运算的结果是61;
问题:这个61是个什么结果是IQ26吗?还是IQ13?还是就是3.0268 * 20 = 60.536的四舍五入?为什么呢?没人会吗
Susan Yang:
回复 user1832931:
在IQmathLib.h中的定义如下
extern long _IQ26rsmpy(long A, long B);