这个二次方程不会在我确定要返回的字符串中返回负数。 等式如下:
public class QuadraticEquation {
String final0;
public String calculate(int a, int b, int c) {
double done1 = ((-1 * b) + Math.sqrt((b * b) - (4 * a * c))) / (2 * a);
double done2 = ((-1 * b) - Math.sqrt((b * b) - (4 * a * c))) / (2 * a);
final0 = "x = " + (done1) + " or x = " + (done2);
return final0;
}
}
想象一个具有 a、b 和 c 值(如 -3、13 和 -4)的方程。它的返回值将是-0.3(重复)和-4。但这个方程只返回正数,所以在这种情况下它将返回 0.3(重复)和 4。为什么会这样,我能做些什么来解决它?
注意:我确实相信这是一个 Java 错误,而不是数学错误。如果这是一个数学错误,请在评论中告诉我,我会立即将其放在适当的论坛中。谢谢。
最佳答案
public static void main(String[] args) {
String final0 = calculate(-3, 13, -4);
System.out.println(final0);
}
public static String calculate(int a, int b, int c) {
String final0 ;
int i = -1 * b; // -1 * 13 = -13
System.out.println(i);
int j = 4 * a * c; // 4 * -3 * -4 = 4 * 12 = 48
System.out.println(j);
double sqrt = Math.sqrt((b * b) - j); // sqrt ((13 * 13) - 48) = sqrt(169 - 48) = sqrt(121) = 11
System.out.println(sqrt);
double d = i + sqrt; // -13 + 11 = -2
System.out.println(d);
int k = 2 * a; // 2* -3 = -6
System.out.println(k);
double done1 = d / k; // -2 / -6 = 1/3 = 0.3333333333
System.out.println(done1);
double done2 = (i - sqrt) / k;
final0 = "x = " + (done1) + " or x = " + (done2);
return final0;
}
如果您将方法分解为更多局部变量,您将看到 Java 中的数学工作正常。
关于java - 为什么这个二次方程不会返回负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16511584/