Double是NaN,但不应该

时间:2019-08-10 09:42:20

标签: java

你好,我是Java的新手,我不明白为什么我的Programm两次输出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
}

2 个答案:

答案 0 :(得分:3)

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

尝试打印temp变量,然后根据您的输入,您将得到相同的NaN消息。基本上,该消息是由以下事实引起的:使用“实数”不能解决您的问题。

您应该阅读complex个数字。

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

由于您在回答问题时未添加值,因此我正在编辑此答案以明确说明其不起作用的原因:

  1. 您正在尝试解决:a * x^2 + b * x + c = 02 * x^2 + 3 * x + 3 = 0
  2. 求解方程式的必要条件是b^2 - 4*a*c >= 03*3 - 4*2*3 > 0 => 由于-15 < 0
  3. 未能达到必要的条件

来自here

  

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

答案 1 :(得分:1)

您实际上是从此行收到错误NaN(不是数字)-

double temp = Math.sqrt(b*b-4*a*c);

原因(3*3-4*2*3)给出-15。负数的平方根为您提供NaN。因此,您得到NaN的两倍。

您可以尝试使用以下代码段以获得正确的结果-

        double temp = b * b - 4.0 * a * c;

        System.out.println("The Result for A:" +a +" B:" +b +" C:" +c +" is");
        if (temp > 0.0) {
            double result_one = (-b + Math.pow(result, 0.5)) / (2.0 * a);
            double result_two = (-b - Math.pow(result, 0.5)) / (2.0 * a);
            System.out.println("Result 1 : " + result_one);                
            System.out.println("Result 2 : " + result_two);
        } else if (temp == 0.0) {
            double result_one = -b / (2.0 * a);
            System.out.println("The root is " + result_one);
        } else {
            System.out.println("The equation has no real roots.");
        }