This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMS320F2.8069万:IQ数学和64位长性能翻倍

Guru**** 2576215 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/642236/compiler-tms320f28069-iq-math-and-64bit-long-doubles-performance

部件号:TMS320F2.8069万

工具/软件: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位浮点的精度,并在已经不完善的定点转换中导致更多错误?

如何量化此错误?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    我们已将您的查询转至IQMath专家。 由于美国工厂因感恩节假期而关闭,响应可能会延迟。

    谢谢,此致,
    Veena
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Thomas

    执行的代码取决于在“IQmathLib.h”头文件中定义的Math_type的设置。  如果将其设置为IQ_Math,则会得到整数乘积描述,并且使用64位中间数据会保留结果的准确性,否则将结果恢复为iQ24格式时,左移位中的位将丢失。

    如果将Math_type定义设置为float_Math,编译器将使用RTS库或FPU (如果可用)实现乘以浮点数据。  您不需要更改宏即可实现此操作。

    我建议您保持宏不变,并通过更改MatH_type来选择要使用的数据类型。

    此致,

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Thomas

    您的理解是正确的。

    我们在队列中有一个跟踪请求来解决此问题。 同时,您可以更改您在帖子中提到的方式。  

    此致
    Manish Bhardwaj