Java 二次算法的实现

Java 二次算法的实现,java,algorithm,math,quadratic,coefficients,Java,Algorithm,Math,Quadratic,Coefficients,我正在读罗伯特·塞吉威克和凯文·韦恩写的一本编程入门书 在其中一个示例中,它们实现了一个二次类,如下所示: public class Quadratic { public static void main(String[] args) { double b = Double.parseDouble(args[0]); double c = Double.parseDouble(args[1]); double discriminan

我正在读罗伯特·塞吉威克和凯文·韦恩写的一本编程入门书

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

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));
    }

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

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

roots = (-b +(-) sqrt((b^2) - (4*a*c))) / (2*a).
     // here - alongwith + represents how to find second root.
我建议你采用常用的方法。如果作者使用了不同的约定,那么请不要遵循

请遵循标准/常规方法。这很容易理解

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


作为编辑添加到问题中的解决方案看起来是正确的。所以,我建议你这样做。

我认为作者假设了某种标准化,其中二次方程的前导系数为1

例如:

2x2 + 4x + 8 = 0 将被代表为

x2 + 2x + 4 = 0
这两个方程都是一样的,只是其中一个已经被标准化了,可以这么说。

你能看看我的编辑并提供一些想法吗?这是不正确的。作者把它从方程中取消了,而不是从二次根的公式中取消了。您能修改一下您的答案吗,因为它似乎是被接受的答案?@user1952500-对不起,这是正确的/标准的公式。这不可能是错的。其次,我没有这本书。我怎么说作者取消了什么?让OP采用标准公式方法。谢谢你的观点。如果你没有这本书,不要说作者错了。说问题中提到的不是标准公式。2.在数学中,没有固定的公式,有数百种方法可以实现同样的事情。我之所以担心这个措辞,是因为:塞吉威克,作者是一位著名的计算机科学家,是一位制定你所说的惯例的人。你可以在维基上读到更多关于他的信息。除非你对上下文非常确定,否则称他错是不好的。如果判别式是否定的,或者a==0,就不好了。这是一个幼稚的实现,没有考虑特殊情况a==0,b==0,c==0。@duffymo谢谢你的反馈你能解释一下你的想法吗?你有替代的解决方案吗?是的,仔细检查我提到的三个案例,看看这会如何改变解决方案。例如,如果b=0,则有两种解决方案:+/-sqrtc/a。如果a=0,则只有一个解决方案:-c/b。如果c=0,则有两种解决方案:0和-b/a。如果判别式为负,则两个解为复数,彼此共轭。你应该解释所有这些。