工具/软件:TI C/C++编译器
我正在使用 启用FPU的TMS320F2.8069万。 因此,我决定打开警告,告诉我是否在任何地方使用任何64位浮点数学运算(不允许#1558-D 64位浮点运算)
我看到的是在所有IQ数学转换函数中:
#define _iQ24 (a) (长)(((a)* 1677.7216万.0L)
当我通过时
float_t值;
x =_iQ24 (值);
然后,该值将扩展到64位长双精度数,再乘以长双精度常量 1677.7216万.0L。 然后将结果转换回32位整数类型。
这给了我以上的警告,显然比使用32位FPU乘法慢得多。
如果我将宏更改为:
#define _iQ24 (a) (长)(((a)* 1677.7216万.0F)
然后一切都停留在32位浮点,警告消失了,这是好的和快速的。
这里是否存在这样一种风险:乘法会溢出32位浮点的精度,并在已经不完善的定点转换中导致更多错误?
如何量化此错误?