0

我正在阅读 Robert Sedgewick 和 Kevin Wayne 的编程入门书籍。

在其中一个示例中,他们实现了一个二次类,如下所示:

public class Quadratic
{
    public static void main(String[] args)
    {
        double b = Double.parseDouble(args[0]);
        double c = Double.parseDouble(args[1]);
        double discriminant = b * b - 4.0 * c;
        double d = Math.sqrt(discriminant);
        System.out.println((-b + d) / 2.0);
        System.out.println((-b - d) / 2.0);
    }
}

作者省略了二次公式的“a”系数。这是因为“a”系数可以抵消(分子/分母)吗?

根据反馈......以下是否是正确的解决方案:

public static void main(String[] args)
    {
        double b = Double.parseDouble(args[0]);
        double c = Double.parseDouble(args[1]);
        double a = Double.parseDouble(args[2]);
        double discriminant = b * b - 4.0 * a * c;
        double d = Math.sqrt(discriminant);
        System.out.println((-b + d) / (2.0 * a));
        System.out.println((-b - d) / (2.0 * a));
    }
4

2 回答 2

4

不,作者可能以不同的方式实现了该算法。假设一般情况下,a不能取消,因为-b因子不包含 a。

求二次方程的根的公式是:-

roots = (-b +(-) sqrt((b^2) - (4*a*c))) / (2*a).
     // here - alongwith + represents how to find second root.

我建议你通过常用的方式。如果作者使用了不同的约定,请不要遵循。

请遵循标准/通用方式。这很容易理解。

根据反馈... 以下是正确的解决方案吗:..

您作为编辑添加到问题中的解决方案似乎是正确的。所以,我建议你走这条路。

于 2016-03-08T17:32:34.427 回答
3

我认为作者假设了某种归一化,其中二次方程的领先系数为 1。

因此,例如:

2x 2 + 4x + 8 = 0

将表示为

x 2 + 2x + 4 = 0

这些都是同一个方程,只是一个已经标准化,可以这么说。

于 2016-03-08T17:33:27.227 回答