我正在研究找到2个斜坡的程序,然后比较它们以确定它们是否相等。我正在使用双打。我发现,即使我的斜坡应该“相等”,它们也会稍微脱落,所以并没有表现出平等。例如,我得到一个1.0000000000000009和0.9999999999999999的斜率。所以它们在理论上应该是平等的,但它们不是。
我该怎么做才能解决这个问题?
答案 0 :(得分:2)
如果你正在使用双打,你永远不会解决这个问题:十进制数的表示方式有局限性,这会在你的计算中积累,并给你这些微小的差异。一个好的代码审计实际上会警告你双打之间的平等。
处理它的一种方法是确保差异的绝对值低于你设定的某个限度。
Here's an article关于浮点数表示和比较的危险。
或者,您可以切换到更好的类来进行精确的数字处理,例如BigDecimal
。
答案 1 :(得分:0)
比较2个斜率你可以设置一些PRECISION_LEVEL,然后比较如下
final double PRECISON_LEVEL = 0.01;
if(Math.abs(slope1 - slope2) < PRECISION_LEVEL) {
System.out.println("Equal");
}
else {
System.out.println("Not Equal");
}