猿问

带有 c 规则的 Mullers 方法总是打印 NaN

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

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

但我有一个问题:当 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;


}


Smart猫小萌
浏览 164回答 1
1回答

哔哔one

标准 Java Math.sqrt 无法处理负数的平方根。它将返回 NaN。在数学上,负实数的平方根是复数。如果二次判别式 (b**2 -4ac) 为负,则在数学上,其平方根应视为复数。做其他事情将是一个错误。在穆勒方法的情况下,您试图找到方程的根,并且您需要知道根是实数还是复数。如果您只想使用实数/实根和 java.Math,则应将负参数视为错误条件。如果要处理复数,则需要使用支持 sqrt() 和其他复数运算的 Java 库,例如 Apache Commons Math。
随时随地看视频慕课网APP

相关分类

Java
我要回答