gpt4 book ai didi

java - EQ Solver 字符串返回中的复杂值问题

转载 作者:行者123 更新时间:2023-11-30 03:31:48 25 4
gpt4 key购买 nike

我有这个方法来求解根据增量返回 2 种类型数组的二次方程(如果小于零则有复数解)

public static final String[] quadEquationSolver(double a, double b, double c) {
double delta = (b * b) - 4 * a * c;
double q;
if (delta < 0) {
double deltar = Math.abs(Math.sqrt(delta));
q = ((b < 0) ? -0.5 * (b - deltar) : -0.5 * (b + deltar));
double t0 = q / a;
double t1 = c / q;
// return sorted array
return (t0 > t1) ? new String[] { t1 + "i", t0 + "i" }
: new String[] { t0 + "i", t1 + "i" };
} else {
double deltar = Math.sqrt(delta);
q = ((b < 0) ? -0.5 * (b - deltar) : -0.5 * (b + deltar));
double t0 = q / a;
double t1 = c / q;
// return sorted array
return (t0 > t1) ? new String[] { t1 + "", t0 + "" }
: new String[] { t0 + "", t1 + "" };
}

}

不幸的是当delta<0我得到一个仅包含 NaNi 的字符串数组值尽管结果正确,但我不明白为什么

最佳答案

问题在这里:

if (delta < 0) {
double deltar = Math.abs(Math.sqrt(delta));

delta < 0 , Math.sqrt(delta)将返回 NaNMath.abs(NaN)也会根据 API 返回 NaN .任何涉及 NaN 值的后续公式也将产生 NaN 结果,这就是为什么您会看到现在看到的结果。

你应该尝试交换 Math.sqrtMath.abs方法调用,以避免这样的问题:

if (delta < 0) {
double deltar = Math.sqrt(Math.abs(delta));

Java 数学库本身不支持复数处理。如果你想明确地使用复数,你可以尝试查看 Apache Commons Math Library

关于java - EQ Solver 字符串返回中的复杂值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17332010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com