带有c规则的Mullers方法始终打印NaN

时间:2018-08-12 21:57:33

标签: java algorithm math

我正在尝试通过Java应用Mullers方法,该规则说我有变量B:此变量B将在C规则中使用符号(-,+)

在c规则中,我必须像这样使用变量B符号: enter image description here

但是我有一个问题:仅当c结果为负时,cmd打印“ NaN” >>而不是数字

我认为标志是主要问题,这是我的C代码:`

 if( B_value() > 0 ) // Positive Sign +
{

   double x =   X2_float -  ( 2 * number2 ) / ( B_value() + ( Math.sqrt(Math.pow(B_value(),2) - 4 * A_value() * number2   ) )     );
    t = (float) x;

}

else
{
    double x =    X2_float -  ( 2 * number2 ) / ( B_value() - ( Math.sqrt(Math.pow(B_value(),2) - 4 * A_value() * number2   ) )     );
    t = (float) x;

}

1 个答案:

答案 0 :(得分:1)

标准Java Math.sqrt无法处理负数的平方根。它将返回NaN。

从数学上讲,负实数的平方根是复数。如果二次判别式(b ** 2 -4ac)为负,则在数学上,其平方根应视为复数。做其他事情将是一个错误。对于穆勒方法,您正在尝试寻找方程式的根,并且您需要知道该根是期望的实数还是复杂的。

如果只想使用实数/实根和仅使用java.Math,则应将负参数视为错误条件。

如果要使用复数,则需要使用一个支持sqrt()的Java库以及对复数的其他运算,例如Apache Commons Math。