-1

判断两个浮点数是否相同的方法似乎有很多。以下是我发现的一些示例:

  1. fabs(x - y) < n * FLT_EPSILON * fabs(x)或者fabs(x - y) < n * FLT_EPSILON * fabs(y)

  2. fabs(x - y) < n * FLT_EPSILON * fabs(x + y)

  3. fabs(x - y) < n * FLT_EPSILON * fabs(x + y) || fabs(x - y) < FLT_MIN)

  4. fabs(x - y) / sqrt(x * x + y * y + FLT_EPSILON * FLT_EPSILON) < n * FLT_EPSILON

我真的对他们感到困惑。假设有一个比较两个浮点数的最佳方法,这是最快且最准确的,其他方法甚至不应该存在。所以这些不同的方式肯定各有优劣。

我的问题是:哪种方法最快/最准确/最实用

参考链接:

http://accu.org/index.php/journals/1558(1和 4)

https://stackoverflow.com/a/10335601/5399734(2和3)


澄清:至少,我不认为“最快/最准确”主要是基于意见的。

4

1 回答 1

2

最快最准确的是x == y. 在我知道计算准确的情况下,我经常使用它。在其他一些情况下,我会根据特定应用程序的要求对其中一个数字进行四舍五入,然后进行精确比较。

到目前为止,我不需要使用您问题中更复杂的表达方式之一。但话又说回来,也许我只是没有做“真正的计算”。

于 2016-03-24T07:51:23.167 回答