如何比较Java中的双精度序列都是“近似相等”的?

2022-09-01 21:41:56

我在java中有一个返回双精度数的方法,我想比较每次调用该方法时返回的每个双精度数(例如5次),这样我就可以得出结论,每次返回的数字几乎相同。

我该怎么做?


答案 1
public static boolean almostEqual(double a, double b, double eps){
    return Math.abs(a-b)<eps;
}

其中 eps 是相等性的度量。


答案 2

您必须首先确定“几乎相同”的含义。例如,在 ulp() 中有一个名为 ulp() 的方法,给定一个双精度值,返回该双精度值和下一个双精度值之间的距离;即,该数字与任何其他数字之间的最小可能差异。您可以简单地比较两个双精度值之间的差异以及调用该方法的结果。java.lang.Math

另一方面,也许您希望两个数字彼此相距不到1%。在这种情况下,执行相同的计算,但使用第一个数字乘以而不是作为最大可接受距离。0.01ulp()


推荐