我正在开发一个找到 2 个斜率的程序,然后将它们进行比较以查看它们是否相等。我为此使用双打。我发现即使我的斜率应该“相等”,它们也会出现一点偏差,因此没有显示为相等。例如,我得到一个斜率 1.0000000000000009 和 0.9999999999999999。所以理论上它们应该是平等的,但事实并非如此。
我能做些什么来解决这个问题?
如果您使用双精度数,则永远无法解决此问题:十进制数的表示方式存在限制,这些限制会在您的计算中累积,并给您带来这些微小的差异。一个好的代码审计实际上会警告你双打之间的平等。
处理它的一种方法是确保差异的绝对值低于您设置的某个限制。
这是一篇关于浮点数表示和比较危险的文章。
或者,您可以切换到更好的类以进行精确的数字处理,例如BigDecimal
.
要比较 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");
}