1

我有一个方法需要 3double秒并通过二次公式计算根:

public static double[] quadraticFormula(double a, double b, double c) throws ArithmeticException {
    double root1 = 0;
    double root2 = 0;

    //sqrt(b^2 - 4ac)
    double discriminant = (b * b) - (4 * a * c);

    if (Double.isNaN(discriminant)) {
        throw new ArithmeticException(discriminant + " is not a number!");
    }

    if (discriminant > 0) {
        //Two roots
        root1 = (-b + Math.sqrt(discriminant)) / (2 * a);
        root2 = (-b - Math.sqrt(discriminant)) / (2 * a);
    } else if (discriminant == 0) {
        //One root
        root1 = (-b + Math.sqrt(discriminant)) / (2 * a);
    } else if (discriminant < 0) {
        //Imaginary roots
    }

    return new double[] { root1, root2 };
}

我想对此进行扩展并添加对虚数的支持。我将如何做到这一点?我的第一个想法是,在 中else if (discriminant < 0),我会得到判别式的绝对值并将根式分解。我要将根输出给用户,所以不要打扰i,我有一个字符串解析器,它知道将i放在哪里。关于更有效方法的任何想法?

4

1 回答 1

3

如果您真的想继续使用复数/虚数,我建议您实现一个表示复数的类。

一个例子可以在这里找到:http: //www.math.ksu.edu/~bennett/jomacg/c.html

如果您以某种方式构建双精度、数组和字符串混合的计算,那么一段时间后它肯定会变得混乱。

于 2011-08-05T16:05:34.400 回答