我在java中有一个返回双精度数的方法,我想要比较每次调用该方法(比如5次)时返回的每个双精度数,这样我就可以得出结论,每次返回的数字几乎是相同的。
我该怎么做呢?
发布于 2012-02-01 11:57:12
你必须首先决定“几乎相同”是什么意思。例如,在java.lang.Math
中有一个名为ulp()的方法,该方法在给定一个双精度值的情况下,返回该双精度值与下一个双精度值之间的距离;即,该数字与其他数字之间可能存在的最小差异。您可以简单地比较两个doubles之间的差异和调用该方法的结果。
另一方面,也许你希望两个数字彼此之间只有1%的误差。在这种情况下,执行相同的计算,但使用第一个数字乘以0.01
而不是ulp()
作为最大可接受距离。
发布于 2012-02-01 11:59:59
public static boolean almostEqual(double a, double b, double eps){
return Math.abs(a-b)<eps;
}
其中,eps是平等的度量。
发布于 2012-02-01 11:58:44
近似相等是用绝对差异来定义的:如果绝对差异不超过某个特定的、假设为小的数字,那么您可以说您正在比较的值“足够接近”。
double diff = Math.abs(actual - expected);
if (diff < 1E-7) {
// Numbers are close enough
}
您必须非常小心,不要混淆“足够接近”和“等于”,因为这两者是根本不同的:相等是可传递的(例如,a==b和b==c一起表示a==c),而“足够接近”不是可传递的。
https://stackoverflow.com/questions/9090500
复制相似问题