试图编写二次公式?

时间:2012-12-03 21:19:59

标签: java quadratic

我是Java新手 - 我的第一个项目之一是构建计算器。

尝试编程二次方程;虽然我没有错,但得到了错误的答案。

void quadratic() {
    if((b*b-4*a*c) < 0){
        System.out.println("The answer is imaginary.");
    }
    else {
        System.out.println(
             "The two roots x values of the quadratic function "
             + a + "x^2 + " + b + "x + " + c + " are "
             + ((-b) + (Math.sqrt((b*b)-(4*a*c))/(2*a))) + " and "
             + ((-b) - (Math.sqrt((b*b)-(4*a*c))/(2*a)))
        );
    }
}

如果我替换a=1, b=4, c=4,我会得到-4和-4。

如果我替换a=1, b=1, c=-12,我得到2.5和-4.5。

这可能只是一个数学错误,但我认为这个公式是正确的。

2 个答案:

答案 0 :(得分:1)

不,论坛不太对劲。你将错误的东西除以2*a

我的建议是将判别式计算分解出来,并摆脱多余的括号。这样可以更容易地获得正确的代码:

void quadratic() {
    double discriminant = b*b-4*a*c;
    if(discriminant < 0) {
        System.out.println("The answer is imaginary.");
    } else {
        System.out.println(
                "The two roots x values of the quadratic function "
                + a + "x^2 + " + b + "x + " + c + " are "
                + (-b + Math.sqrt(discriminant)) / (2*a) + " and "
                + (-b - Math.sqrt(discriminant)) / (2*a)
                );
    }
}

答案 1 :(得分:0)

你缺少括号,应该是

(((-b) + (Math.sqrt((b*b)-(4*a*c)))/(2*a))) + " and " + (((-b) - (Math.sqrt((b*b)-(4*a*c)))/(2*a))))

你需要将整个事物除以2a。