我正在测试一个我想知道的随机公式。在编写代码测试公式后,大多数是正确的,但有些是错误的。然而,我注意到,在我的打印语句中,等式的两边是相等的,但代码说它们不是。
这是代码:
public static void main(String[] args){
for(int i = 0; i < 100; i++){
String t = runTest((100-i)/100.0,i/100.0);
if(t.substring(0, 1).equals("1")) System.err.println(t);
else System.out.println(t.substring(1));
}
}
private static String runTest(double a, double b){
double l = (a + b);
double r = (a*a + b*b + 2*a*b);
boolean isValid = false;
if(l != 1) {
return 1+String.format("%f + %f = %f\tInvalid", a, b, a + b);
}
if(l==r){
isValid = true;
}
return 0+String.format("A: %f B: %f LEFT: %f RIGHT: %f RESULT: %s", a, b, l, r, String.valueOf(isValid));
}
我也尝试将 l 和 r 强制转换为整数,并且 r 返回 0 有时意味着代码认为 r 低于 0。实际上和 print 语句,右侧也是 1。起初我以为它是一个浮点错误,但双方最终都为 1。
你知道为什么会发生这种情况以及我该如何解决这个问题吗?
谢谢。