当前位置:  开发笔记 > 编程语言 > 正文

我们应该将浮点数与相对*误差进行比较吗?

如何解决《我们应该将浮点数与相对*误差进行比较吗?》经验,为你挑选了2个好方法。

到目前为止,我已经看到很多关于浮点数相等的帖子.对于"我们应该如何决定x和y是否相等?"这样的问题的标准答案.是

abs(x - y) < epsilon

其中epsilon是一个固定的小常数.这是因为"操作数"x和y通常是涉及舍入误差的某些计算的结果,因此标准相等运算符==不是我们的意思,我们应该问的是x和y是否接近,不相等.

现在,我觉得如果x与y"几乎相等",那么x*10 ^ 20也应该与y*10 ^ 20"几乎相等",因为相对误差应该是相同的(但是"相对的" "到底是什么?" 但是对于这些大数字,上述测试将失败,即该解决方案不会"扩展".

你会如何处理这个问题?我们应该重新调整数字还是重新调整epsilon?怎么样?(或者我的直觉是错的吗?)

这是一个相关的问题,但我不喜欢它接受的答案,因为reinterpret_cast对我来说似乎有点棘手,我不明白发生了什么.请尝试提供简单的测试.



1> Adam Rosenfi..:

这一切都取决于具体的问题领域.是的,在一般情况下使用相对误差会更正确,但由于它涉及额外的浮点除法,因此效率可能会大大降低.如果您知道问题中数字的大致比例,则可以使用绝对误差.

本页概述了许多用于比较浮点数的技术.它还涉及许多重要问题,例如具有次正规,无穷大和NaN的问题.这是一个很好的阅读,我强烈建议你一直阅读.



2> J.T. Hurley..:

作为替代解决方案,为什么不只是舍入或截断数字然后进行直接比较呢?通过提前设置有效位数,可以确定该范围内的准确性。

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有