2014-01-17 5 views
0

Мой код:Я делаю простой квадратичный решатель уравнения в java, используя квадратичную формулу. Это то, что случилось:

int a = 1; 
int b = 6; 
int c = 5; 
double x1 = (-b + Math.sqrt(b^2 - 4*a*c))/(2*a); 
double x2 = (-b - Math.sqrt(b^2 - 4*a*c))/(2*a); 
System.out.println("x=" + x1 + x2); 

Выход:

x=NaNNan 
+2

Вы должны добавить следующий if-statement: 'if (x1 + x2 == NaNNan) {x = Batman}'. – bourbaki4481472

ответ

5

b^2 не делать то, что вы думаете, что делает в Java. Вместо этого напишите b*b. Оператор ^ на самом деле the bitwise-XOR operator; нет оператора экспоненты. (Существует, однако, Math.pow() function.)

0

Вы можете написать b * b или Math.pow(b,2) вместо b^2, который является bitwise xor (исключающее или) из b с 2.

2

В дополнение к ^ быть XOR вместо того, чтобы сила, ваш решатель имеет другую проблему: иногда, В меньше, чем 4AC, в этом случае уравнение имеет только комплексные решения. Ваш код должен проверить это условие перед вызовом Math.sqrt, чтобы избежать получения ответа NaN.

И, наконец, ваш результат неправильный: ваш println будет производить конкатенацию корней без промежутка между ними, вместо того, чтобы печатать их по отдельности.

Вот ваш код после исправления:

int a = 1; 
int b = 6; 
int c = 5; 
int d = b*b - 4*a*c; 
if (d < 0) { 
    System.out.println("No real solutions."); 
} else { 
    double sqD = Math.sqrt(d); 
    double x1 = (-b + sqD)/(2*a); 
    double x2 = (-b - sqD)/(2*a); 
    System.out.println("x=" + x1 + " " + x2); 
} 
+1

's/\ brational/real/g',' s/irrational/complex/g' – delnan

+1

_ «в этом случае уравнение имеет только иррациональные решения». Вы имеете в виду комплексные решения. И результат корректен, так как он совпадает с «System.out.println ((« x = »+ x1) + x2);' –

+0

@delnan Большое спасибо за исправление моей терминологии. – dasblinkenlight

0

Похоже, что вы пытаетесь сделать тригонометрической функции здесь. Не помню имя, но я могу сказать, что b означает квадрат? Если это так, используйте Math.pow (numberToSquare, theSquareNumber) Одна строка будет выглядеть так: Двойной x1 = (-b + Math.sqrt (Math.pow (b, 2) - 4 * a * c))/(2 * a)

Смежные вопросы