Java双重比较

时间:2012-07-09 07:43:16

标签: java double

有没有用于进行双重比较的java库? e.g。

public static boolean greaterThanOrEqual(double a, double b, double epsilon){
     return a - b > -epsilon;
}

我开始的每个项目最终都会重新实现这个并复制粘贴代码和测试。

NB为什么更好地使用第三方JAR的一个很好的例子是IBM推荐以下内容:

  

“如果您不知道基础测量的比例,请使用   测试“abs(a / b - 1)< epsilon”可能比简单更强大   比较差异“

我怀疑很多人会想到这一点,并说明即使是简单的代码也可能是次优的。

3 个答案:

答案 0 :(得分:18)

答案 1 :(得分:2)

在标准的Java库中,没有方法来处理你的问题,我建议你按照Joachim的链接使用那个非常适合你需要的库,即使我的建议是创建一个你工作的库可以添加常用的方法,就像你在问题中所说的那样,对于你的问题的不同实现,你应该考虑这个:

Java double comparison epsilon

随意提出任何其他含糊之处

答案 2 :(得分:2)

你应该弃用任何使用天真"最大绝对差异的图书馆"方法(像番石榴)。正如Bruce Dawson的优秀文章Comparing Floating Point Numbers, 2012 edition中所详述的那样,它非常容易出错,因为它仅适用于非常有限的值范围。一种更强大的方法是使用相对差异或ULP进行近似比较。

我所知道的唯一一个实现正确近似比较算法的库是apache.common.math