Cálculo de raizes do 2º grau

Fala galera,

Estou recorrendo mais uma vez ao GUJ pra me dar uma força. :lol:

Eu tenho um trabalho da faculdade que precisa calcular as raizes de uma equação do 2º grau. Mas não estou conseguindo fazer com as raizes complexas!

[code]else {
double delta = (b * b) - (4 * a * c);

  if (delta > 0) {
    System.out.println ("**Raizes reais simples**");
    System.out.println ("1ª raiz = " + ((b * (-1)) - Math.sqrt(delta)) / (2 * a) + "\n" + "2º raiz = " + ((b * (-1)) + Math.sqrt(delta)) / (2 * a));
  }
  
  else if (delta == 0) {
    System.out.println ("**Raiz real dupla**");
    System.out.println ("1ª raiz = 2ª raiz = " + ((b * (-1)) - Math.sqrt(delta)) / (2 * a));
  }
  
  else {
    System.out.println ("**Raizes complexas**");
    System.out.println ("1ª raiz = " + (((b * (-1)) / (2 * a)) - (Math.sqrt(delta) / (2 * a))) + "i" + "\n" + "2º raiz = " + (((b * (-1)) / (2 * a)) + (Math.sqrt(delta) / (2 * a))) + "i");
  }
}[/code]

Aqui tem uma tabela ensinando a calcular. Eu fiz essa fórmula, porém adicionei o "i" no fim, mas não deu muito certo.

Na interação com o programa, aparece as seguintes saídas do método:

Raizes r = new Raizes (1) r.imprimeRaizes(7.18, 43.75, -31.21) **Raizes reais simples** 1ª raiz = -6.738393810226726 2º raiz = 0.6450790469955272 r.imprimeRaizes(3, -18.0, 27.0) **Raiz real dupla** 1ª raiz = 2ª raiz = 3.0 r.imprimeRaizes(1, 1, 1) **Raizes complexas** 1ª raiz = NaNi 2º raiz = NaNi r.imprimeRaizes (0, 1, 1) **Equação não é do 2º grau**

r.imprimeRaizes(1, 1, 1)
Raizes complexas
1ª raiz = NaNi
2º raiz = NaNi

Aqui que eu tenho problema: como retornar o valor correto? :cry:

Deveria ser retornado isso:

r.imprimeRaizes(1, 1, 1) reais complexas 1a raiz => -0.5 - 0.8660254037844386i 2a raiz => -0.5 + 0.8660254037844386i

Alguém poderia me ajudar? :roll:

O método imprimirRaizes deve checar se o número cuja raiz quadrada deve ser extraída é positivo ou negativo. Se for negativo, então você deve tirar a raiz quadrada do valor absoluto desse número (é que Math.sqrt não sabe lidar com números complexos e se você passar um número negativo para esse método, volta Math.NaN mesmo.)
Acho que você sabe lidar com números complexos, não?

Sei sim, mas precisarei recorrer a um livro de matemática pra me lembrar como calcular raízes complexas.

Havia me esquecido que raíz quadrada de números negativos não podem ser calculadas com esse método!

Vou tentar achar algo. Qualquer coisa eu pergunto aqui novamente.

Obrigado por enquanto.

FUNCIONOU!!!

Descobri o erro…

[code]System.out.println ("1ª raiz = " + ((b * (-1)) / (2 * a)) + " - " + (Math.sqrt(delta * (-1)) / (2 * a)) + “i”);

//Eu estava fazendo o seguinte

System.out.println ("1ª raiz = " + ((b * (-1)) / (2 * a)) - (Math.sqrt(delta * (-1)) / (2 * a)) + “i”);
[/code]

Eu esqueci que um número complexo é formado por 2 partes: parte real e parte imaginária. Eu estava subtraindo um do outro, mas o correto é concatenar as duas operações!

Vlw galera!

[quote=claudneto]FUNCIONOU!!!

Descobri o erro…

[code]System.out.println ("1ª raiz = " + ((b * (-1)) / (2 * a)) + " - " + (Math.sqrt(delta * (-1)) / (2 * a)) + “i”);

//Eu estava fazendo o seguinte

System.out.println ("1ª raiz = " + ((b * (-1)) / (2 * a)) - (Math.sqrt(delta * (-1)) / (2 * a)) + “i”);
[/code]

[/quote]

Sim, o erro era a falta de multiplicar delta por -1. Mas para fazer basta fazer Math.sqrt(-delta), o menos atrás já multiplica por -1, fica mais limpo.