似乎有很多方法可以判断两个浮点数是否相同。以下是我发现的一些例子:
fabs(x - y) < n * FLT_EPSILON * fabs(x)
或fabs(x - y) < n * FLT_EPSILON * fabs(y)
fabs(x - y) < n * FLT_EPSILON * fabs(x + y)
fabs(x - y) < n * FLT_EPSILON * fabs(x + y) || fabs(x - y) < FLT_MIN)
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)
澄清:至少,我认为“最快/最准确”主要是基于意见的。
答案 0 :(得分:2)
最快最准确的是x == y
。在我知道计算准确的情况下,我经常使用它。在其他一些情况下,我按照特定应用程序的要求对其中一个数字进行舍入,然后进行精确比较。
到目前为止,我不需要使用您问题中较复杂的表达式之一。但话说回来,也许我只是没有做“真正的计算”。