比较浮点数的方法之间的差异

时间:2016-03-24 07:27:09

标签: floating-point ieee-754 floating-point-comparison

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

  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

  5. 我真的很困惑他们。假设有一种比较两个浮点数的最佳方法,这是最快和最准确的,其他方法甚至不应该存在。所以这些不同的方式必须有自己的优点和缺点。

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

    参考链接:

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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