有没有用于进行双重比较的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”可能比简单更强大 比较差异“
我怀疑很多人会想到这一点,并说明即使是简单的代码也可能是次优的。
答案 0 :(得分:18)
答案 1 :(得分:2)
在标准的Java库中,没有方法来处理你的问题,我建议你按照Joachim的链接使用那个非常适合你需要的库,即使我的建议是创建一个你工作的库可以添加常用的方法,就像你在问题中所说的那样,对于你的问题的不同实现,你应该考虑这个:
Java double comparison epsilon
随意提出任何其他含糊之处
答案 2 :(得分:2)
你应该弃用任何使用天真"最大绝对差异的图书馆"方法(像番石榴)。正如Bruce Dawson的优秀文章Comparing Floating Point Numbers, 2012 edition中所详述的那样,它非常容易出错,因为它仅适用于非常有限的值范围。一种更强大的方法是使用相对差异或ULP进行近似比较。
我所知道的唯一一个实现正确近似比较算法的库是apache.common.math
。