到目前为止,我已经看到很多关于浮点数相等的帖子。像“我们应该如何确定 x 和 y 是否相等?”这样的问题的标准答案。是
abs(x - y) < epsilon
其中 epsilon 是一个固定的小常数。这是因为“操作数”x 和 y 通常是一些涉及舍入误差的计算的结果,因此标准相等运算符 == 不是我们的意思,我们真正应该问的是 x 和 y 是否接近, 不相等。
现在,我觉得如果 x 与 y “几乎相等”,那么 x*10^20 也应该与 y*10^20 “几乎相等”,因为相对误差应该是相同的(但“相对“对什么?)。但是对于这些大数字,上述测试将失败,即该解决方案不会“扩展”。
你会如何处理这个问题?我们应该重新调整数字还是重新调整 epsilon?如何?(还是我的直觉错了?)
这是一个相关的问题,但我不喜欢它接受的答案,因为 reinterpret_cast 事情对我来说似乎有点棘手,我不明白发生了什么。请尝试提供一个简单的测试。