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.

[参考译文] TMS320F28377D:“/"和“和“_divf32 ()“输出结果不对齐、“/"结果“结果精度更高

Guru**** 2492385 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1558355/tms320f28377d-and-_divf32-output-result-not-align-result-accuracy-is-better

器件型号:TMS320F28377D


工具/软件:

您好专家

客户使用“/"和“和“_divf32 ()“计算以下相同数据:


但会得到不同的结果:

使用“/"计算“计算结果如下:

–1.99986887、

0.999941111、

0.999869108、

0.999927998.  
使用“_divf32 ()“计算结果为:

–1.99986899、

0.99994117、

0.999869168、

0.999928057。  
与仿真结果相比、“/"结果“结果更好。

问题是:为什么_divf32 () 结果错误大于“/"?“?

如何提高_divf32 () 精度?

谢谢

Joe

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

    您好 Joe、

     divf32 () 使用 FPUfastRTS 库,但“/"可能“可能使用标准 RTS 库实现除法。

    该 FPUfastRTS 库是标准运行时库的“快速“补充。 它提供了优化的汇编级实现、故意以少量精度实现显著的速度提升。 它通常通过使用更高效的迭代算法来实现这一点、该算法会快速收敛、但不能保证标准库的完全精度。

    如果 精度更重要、则标准库是更好的选择。

    此致。

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

    嗨、Meghana

    如何检查编译器选项设置为-relax _divf32 () 和/是否都可以使用 FPU 编译? 不同之处是这 2 个函数调用不同的库?

    谢谢

    Joe

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

    您好 Joe、

    是、的行为 / 由编译器标志确定。

    使用 --fp_mode=relaxed、编译器可以执行代数重新关联或其他速度快捷方式、使内在函数的行为接近_divf32 () 应该得到的值。如果编译器选项设置为宽松、 如果启用三角函数加速器 (tmu)()--tmu_support、编译器将 math.h 用更快、等效的 TMU 硬件指令替换库调用。
    使用 --fp_mode=strict、它遵循精确的 IEEE 754 标准、可能导致与不同的结果 _divf32()。 此时它将调用标准库。

    此致。

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

    嗨、 Meghana

    是否有任何使用 TMU 的方法但其精度与“/"相同“相同?

    谢谢

    Joe

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

    您好 Joe、

    不是直接的,他们可以尝试把数学运算分解为假设 a/b 作为 a* 1/b ,但他们可能需要做 一个额外的步骤 ,如牛顿 — 拉弗森迭代,以优化结果到所需的全精度之前的最终乘法,这可能不是直接的。

    理想情况下、TMU 是为速度而构建的、因此精度可能不是一流的。

    此致。