为什么java中的一段代码在运行时会产生NaN



所以我正在运行一段代码(发布在下面,它在运行时产生一个NaN(我正在运行的代码只是产生一个答案,可以是负的,也可以是正的(基本上是二次的((

public double quadratic(int a, int b, int c)
{
double quadratic = Math.pow(def, 2) - 4*def*def;
return((-1*b + Math.sqrt(quadratic)) / 2*a);
}

只有当二次方大于或等于零时,Math.sqrt(二次方(才会返回有效值。

如果二次方小于零,则Math.sqrt(二次方(返回NaN。例如,如果def为1,则返回NaN。

您没有使用正确的公式。判别式为CCD_ 1。该方法的第一行等效于def * def - 4 * def * def = -3 * def * def,它几乎在所有情况下都会产生负面结果。当参数为负数时,Math.sqrt将返回NaN。这也意味着,当二次方没有实根时,校正后的方法仍将返回NaN

public double quadratic(int a, int b, int c) {
double quadratic = b * b - 4 * a * c;
return((-1*b + Math.sqrt(quadratic)) / 2*a);
}

我更改了以下代码段,使NaN不再出现。

quadratic = (Math.pow(b, 2)) - 4*a*c;
quadratictwo = -1*b + (Math.sqrt(quadratic) / 2*a); 

最新更新