java - Double 是 NaN,但它不应该
问题描述
您好,我是 Java 新手,我不明白为什么我的程序输出 NaN 两次!
这是代码。谁能告诉我它有什么问题?
我给出的输入是 2,3,3(A 是 2 B 是 3 C 是 3)
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.print("A :");
double a = scan.nextDouble();
System.out.print("\nB :");
double b = scan.nextDouble();
System.out.print("\nC :");
double c = scan.nextDouble();
double temp = Math.sqrt(b*b-4*a*c);
double result_one = (-1*b+ temp)/(2*a);
double result_two=(-1*b- temp)/2*a;
System.out.println("The Result for A:" +a +" B:" +b +" C:" +c +" is");
System.out.println("Result 1 : " + result_one);//This double Should not be NaN
System.out.println("Result 2 : " + result_two);//This double Should not be NaN
}
解决方案
这是一个经典的二次方程。您的问题是由temp
变量引起的。的值b*b
小于4*a*c
,因此这意味着您尝试提取负数的平方根。
尝试打印 temp 变量,根据您的输入,您将收到相同的NaN
消息。基本上,该消息是由于您的问题无法使用“真实”数字解决的事实引起的。
你应该阅读复数。
正如@michalk 在评论中所建议的那样,您可以阅读有关Math.sqrt函数的信息。
由于您在我回答问题时没有添加值,因此我正在编辑此答案以明确解释它为什么不起作用:
- 您正在尝试解决:
a * x^2 + b * x + c = 0
或2 * x^2 + 3 * x + 3 = 0
- 解方程的必要条件是
b^2 - 4*a*c >= 0
or3*3 - 4*2*3 > 0
=> 必要条件不成立,因为-15 < 0
从这里:
返回: a 的正平方根。如果参数为 NaN 或小于零,则结果为 NaN。
推荐阅读
- amazon-web-services - AWS 负载均衡器运行状况检查:运行状况检查失败,代码如下:[301]
- webstorm - WebStorm - 当它有多个定义(实现)时,看不到方法定义的路径
- python - Binascii.error:尝试解密密码时填充不正确
- reactjs - 未提供 React Native GraphQL $id
- php - 我希望这段代码将数据插入数据库表的同一行
- java - 有没有办法使用 Java Writer 对象来写入二进制数据?
- excel - 将数组作为 List 传递给 ParamArray
- javascript - 如何使用“您确定要继续”模式在 Rails 中使用“是”和“否”按钮完成或停止保存按钮操作?
- angular - 数据 URL 很大时图像未呈现:net::ERR_CONNECTION_RESET
- python - 在 az 大小数组中随机将 x 值更改为 y