Floating point 比较浮点数的不同方法

Floating point 比较浮点数的不同方法,floating-point,ieee-754,floating-point-comparison,Floating Point,Ieee 754,Floating Point Comparison,似乎有很多方法可以判断两个浮点数是否相同。以下是我发现的一些例子: fabs(x-y)

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

  • fabs(x-y)
    fabs(x-y)

  • fabs(x-y)

  • fabs(x-y)

  • fabs(x-y)/sqrt(x*x+y*y+FLT\u EPSILON*FLT\u EPSILON)

  • 我真的很困惑。假设有一种比较两个浮点数的最佳方法,它是最快也是最准确的,那么其他方法甚至不应该存在。因此,这些不同的方法肯定有各自的优点和缺点

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

    参考链接:

    (1和4)

    (2和3)



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

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


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

    你从哪里找到这些例子的?请发布链接。顺便说一句,我印象深刻的是,你将所有这些不同来源的信息转换成完全相同的格式,以便于比较:)@MartinJames-Reference添加。嗯……我原以为这是个很好的问题,但现在我得到了两张接近票和两张反对票。你知道我做错了什么吗?这不是什么编程问题。更多的是CS/数学。哦,就是这样!我将把这个问题转移到CS。谢谢你的启发:)除了可能最快的问题外,没有一个问题有答案。这是无关紧要的。你想做正确的事吗?还是很快就搞错了?如果你想快速地做错事,那为什么还要检查这些值呢?如果您想做正确的事情,您需要了解问题、数字来自何处、返回值将如何使用等等。您正在寻找一个不存在的黑盒答案。问题询问4种方法中哪种最快。您指的是问题中未找到的方法。此外,如果不首先定义问题和准确的含义,就不可能说这种方法是最准确的。我能想到任何精确相等的定义都是不准确的。@David:最准确的比较确实是
    x==y
    。但是,当与其他代码结合使用时,它可能不是最合适的解决方案。但是因为它不做任何其他事情,所以它也是最快的。@RudyVelthuis它完全取决于你所说的准确。如果目标是允许计算不精确,则
    ==
    不符合该标准。此外,问题中哪里提到使用
    ==
    ?我错过那部分了吗?你仔细看过这个问题了吗?这样的比较再准确不过了。但是你提供的数据可能不准确,这就是为什么你使用ε。@RudyVelthuis,正如我所想,你没有仔细阅读这个问题。