我正在尝试通过Java应用Mullers方法,该规则说我有变量B:此变量B将在C规则中使用符号(-,+)
但是我有一个问题:仅当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;
}
答案 0 :(得分:1)
标准Java Math.sqrt无法处理负数的平方根。它将返回NaN。
从数学上讲,负实数的平方根是复数。如果二次判别式(b ** 2 -4ac)为负,则在数学上,其平方根应视为复数。做其他事情将是一个错误。对于穆勒方法,您正在尝试寻找方程式的根,并且您需要知道该根是期望的实数还是复杂的。
如果只想使用实数/实根和仅使用java.Math,则应将负参数视为错误条件。
如果要使用复数,则需要使用一个支持sqrt()的Java库以及对复数的其他运算,例如Apache Commons Math。