我有一个方法需要3个double
并通过二次公式计算根:
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,我有一个String解析器,它确切地知道将i放在哪里。对更有效的方法有什么想法吗? 最佳答案
如果您真的想使用复数/虚数,我建议您实现一个代表复数的类。
可以在此处找到一个示例:
http://www.math.ksu.edu/~bennett/jomacg/c.html
如果您以某种方式构建双精度,数组和字符串混合的计算,则一段时间后肯定会变得混乱。
关于java - 虚数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6959220/