为什么这个二次方程不会返回负数?

时间:2013-05-12 20:10:47

标签: java math quadratic

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

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

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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中的数学运算正常。

答案 2 :(得分:1)

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

x = -4.0或x = -0.3333333333333333

Math.sqrt将始终返回一个忽略复数的正数。但除此之外,这还有点。