Я не могу понять, как найти два мнимых числа - PullRequest
0 голосов
/ 13 июля 2020

Итак, я написал программу Java, которая находит решения квадратного c уравнения, и моя проблема в том, что я не могу написать правильный код, чтобы найти «мнимые числа», когда он распечатывает, я просто получить "NaN". Какие есть решения?

import java.util.Scanner;
class Main {
  public static void main(String[] args) {
    
    Scanner scan = new Scanner(System.in);
    
    System.out.print("Enter the value for a: ");
    double a = scan.nextDouble();
    
    System.out.print("Enter the value for b: ");
    double b = scan.nextDouble();
    
    System.out.print("Enter the value for c: ");
    double c = scan.nextDouble();
    
    double result = b * b - 4.0 * a * c;
    
    if(result > 0.0){

      //to find two real solutions

      double x1 = (-b + Math.pow(result, 0.5)) / (2.0 * a);
      double x2 = (-b - Math.pow(result, 0.5)) / (2.0 * a);
      
      System.out.println("There are two real solutions.");
      System.out.println("x1 = " + x1);
      System.out.println("x2 = " + x2);
      
      //to find one real solution

    } else if(result == 0.0){
      double x1 = (-b / (2.0 * a));
      System.out.println("There is one real solution");
      System.out.println("x = " + x1);

      //to find the imaginary numbers

    } else if(result < 0.0){
      double x1 = (-b + Math.pow(result, 0.5)) / (2.0 * a);
      double x2 = (-b - Math.pow(result, 0.5)) / (2.0 * a);
      
      System.out.println("There are two imaginary solutions.");
      System.out.println("x1  = " + x1 + " + " + x2);
      System.out.println("x2  = " + x1 + " - " + x2);
    }
    
  }
}

1 Ответ

2 голосов
/ 13 июля 2020

В вашем коде есть пара неправильных вещей при работе со сложными корнями (когда результат <0): </p>

  1. Вы пытаетесь вычислить квадрат root из result, который является отрицательным . Это приведет к NaN. Правильный подход - получить квадрат root из -result, чтобы получить свой ответ.
  2. Вы вычисляете корни неверно. Оба корня будут иметь одну и ту же действительную часть, которая равна -b/(2*a), и одно и то же значение для мнимой части, отличающееся только своим знаком.

Я исправил ваш код ниже, чтобы получить правильный результат. Вычисляется действительная часть, а затем вычисляется мнимая часть. Затем печатаются корни с мнимыми частями с суффиксом «i» для обозначения мнимой части.

double real = -b / (2*a);
double imag = Math.pow(-result, 0.5) / (2.0 * a);

System.out.println("There are two imaginary solutions.");
System.out.println("x1  = " + real + " + " + imag + "i");
System.out.println("x2  = " + real + " - " + imag + "i");
...