0

这个二次方程不会在我确定它返回的字符串中返回负数。这是等式:

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 错误,而不是数学错误。如果是数学错误,请在评论中告诉我,我会及时将其放在适当的论坛中。谢谢。

4

3 回答 3

2

我本来以为

-3*x^2 + 13 *x + -4 = -3 * (x - 0.33333) * (x - 4) = 0

所以两个肯定的答案是正确的。

试试吧

1 * x^2 + 0 * x -1 = (x - 1) * (x + 1) = 0

即 x = -1 或 +1


这就是我的写法。

public static String calculate(int a, int b, int c) {
    double sqrt = Math.sqrt((b * b) - (4 * a * c));
    double done1 = (-b + sqrt) / (2 * a);
    double done2 = (-b - sqrt) / (2 * a);
    return "x = " + (done1) + " or x = " + (done2);
}
于 2013-05-12T20:21:28.787 回答
2
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 中的数学可以正常工作。

于 2013-05-12T20:25:08.277 回答
1

该代码与您的输入正常工作。例如,如果您将 b 更改为 -13,您将得到

x = -4.0 或 x = -0.3333333333333333

Math.sqrt 将始终返回一个忽略复数的正数。但这有点无关紧要。

于 2013-05-12T20:23:03.697 回答