您好!
我一直在实验比较两个浮点数以获得相等值。
我已经被教授多年、由于浮子精度的原因、这种操作并不安全。
但是、编译器在这方面似乎没有问题(甚至不是警告)、当我检查汇编代码时、我看到此类指令:
这样做会有什么问题吗? 在某些情况下、我们是否可能会出现错误行为? 应该避免它吗?
您应该推荐哪些最佳实践?
谢谢!
此致、
Laurent.
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.
您好!
我一直在实验比较两个浮点数以获得相等值。
我已经被教授多年、由于浮子精度的原因、这种操作并不安全。
但是、编译器在这方面似乎没有问题(甚至不是警告)、当我检查汇编代码时、我看到此类指令:
这样做会有什么问题吗? 在某些情况下、我们是否可能会出现错误行为? 应该避免它吗?
您应该推荐哪些最佳实践?
谢谢!
此致、
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):
但到目前为止、我通过这段简单的代码一直收到相同的错误、所有变量均声明为短整型。
我做错了什么? 我有什么不明白的地方吗?
劳伦特