我正在尝试通过 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;}
1 回答
![?](http://img1.sycdn.imooc.com/54585094000184e602200220-100-100.jpg)
哔哔one
TA贡献1854条经验 获得超8个赞
标准 Java Math.sqrt 无法处理负数的平方根。它将返回 NaN。
在数学上,负实数的平方根是复数。如果二次判别式 (b**2 -4ac) 为负,则在数学上,其平方根应视为复数。做其他事情将是一个错误。在穆勒方法的情况下,您试图找到方程的根,并且您需要知道根是实数还是复数。
如果您只想使用实数/实根和 java.Math,则应将负参数视为错误条件。
如果要处理复数,则需要使用支持 sqrt() 和其他复数运算的 Java 库,例如 Apache Commons Math。
添加回答
举报
0/150
提交
取消