首页 > 解决方案 > 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
}

标签: java

解决方案


这是一个经典的二次方程。您的问题是由temp变量引起的。的值b*b小于4*a*c,因此这意味着您尝试提取负数的平方根。

尝试打印 temp 变量,根据您的输入,您将收到相同的NaN消息。基本上,该消息是由于您的问题无法使用“真实”数字解决的事实引起的。

你应该阅读复数

正如@michalk 在评论中所建议的那样,您可以阅读有关Math.sqrt函数的信息。

由于您在我回答问题时没有添加值,因此我正在编辑此答案以明确解释它为什么不起作用:

  1. 您正在尝试解决:a * x^2 + b * x + c = 02 * x^2 + 3 * x + 3 = 0
  2. 解方程的必要条件是b^2 - 4*a*c >= 0or 3*3 - 4*2*3 > 0 => 必要条件不成立,因为-15 < 0

这里

返回: a 的正平方根。如果参数为 NaN 或小于零,则结果为 NaN。


推荐阅读