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-TMS320F28377D-FET EP:是否比较32位浮点以实现同等安全性?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1328528/tms320f28377d-ep-is-comparing-32-bit-floating-point-compare-for-equal-safe

器件型号:TMS320F28377D-TMS320F28375D-DSP EP

您好!

我一直在实验比较两个浮点数以获得相等值。

我已经被教授多年、由于浮子精度的原因、这种操作并不安全。

但是、编译器在这方面似乎没有问题(甚至不是警告)、当我检查汇编代码时、我看到此类指令:

这样做会有什么问题吗? 在某些情况下、我们是否可能会出现错误行为? 应该避免它吗?

您应该推荐哪些最佳实践?

谢谢!

此致、

Laurent.

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

    您好,Laurent

    [quote userid="527782" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1328528/tms320f28377d-ep-is-comparing-32-bit-floating-point-compare-for-equal-safe

    这样做会有什么问题吗? 在某些情况下、我们是否可能会出现错误行为? 应该避免它吗?

    您应该推荐哪些最佳实践?

    [/报价]

     我相信您对浮点精度的理解是正确的、根据我的理解、这种指令最适合用于小于或大于比较(可能存在一个等同于比较的罕见用例)。

    更好的方法可能是减去两个浮点数、获取结果的绝对值、并使用该指令将其与一些已知偏移进行比较。

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

    没错、这就是为什么我们会在我们的编码标准中明确加入规则来避免这种做法的原因。

    我问、因为当为 CLA 进行编码时、我收到了以下警告:

    #30013-D 比较操作使用整数比较指令,对于会溢出减法的值,该指令不能正常运行。 使用--cla_signed_compare_workaround=on 让编译器解决此问题。

    我一直在阅读权变措施、我看到执行了浮点等式、这对我们不起作用:

    因此、我们需要避免打开此编译器选项、而是使用另一种建议的权变措施、如使用有符号整数(short16):  

    但到目前为止、我通过这段简单的代码一直收到相同的错误、所有变量均声明为短整型。

    我做错了什么? 我有什么不明白的地方吗?

    劳伦特

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

    尊敬的 Laurent:

    您能给我发送一段代码、我可以使用它来再现我身边的警告吗? 它可能比来回做太多更快。

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

    这是您需要的(随附的图片)吗?

    我注意到、当优化级别关闭时、不会发生这种情况。

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

    尊敬的 Laurent:

    您需要什么吗(图片已附)?

    我 指的是可以复制并粘贴到示例项目中的代码、尽管这看起来与 CLA 相关。 您是否已验证 C28内核(在您的 main.c 文件中)上出现了此警告?

    我注意到优化级别关闭时不会发生这种情况。

    当您运行调试会话时、在查看"Disassembly"窗口时、您看到了汇编语言中的任何差异吗?