Cita de: programator11 en 6 Agosto 2014, 15:01 PM
Entiendo...tendria que implementar entonces otra libreria para ello?
Muchas gracias por tu tiempo
No, no, no tienes que implementar ninguna librería nueva (aunque podrías implementar las funciones necesarias para operar con complejos, sería un buen ejercicio). No hace falta que incluyas la biblioteca math. La complex ya te viene con las funciones sqrt y pow preparadas para operar con complejos. Quita el include de math.h, que no te hace falta. Y haz que res1 y res2 sean objetos de la clase complex<double>, en lugar de float. http://www.cplusplus.com/reference/complex/
Podrías, ya que estás, completar el programa para que el usuario pueda introducir coeficientes que no sean necesariamente reales, sino complejos también.
Cita de: eferion en 6 Agosto 2014, 15:19 PM
No necesariamente... tienes que separar los diferentes elementos de la ecuación... por un lado la parte real y por otro la "posible" imaginaria. Es decir, si tenemos que las dos raices son:
y1 = -b/2a + sqrt(b^2-4ac)/2a
y2 = -b/2a - sqrt(b^2-4ac)/2a
Hacemos la separación:
r = -b/2a
i = sqrt(b^2-4ac)/2a
De tal forma que:
y1 = r + i
y2 = r - i
Ahora ya tenemos que R siempre es real, mientras que I será real sólo si el interior de la raiz cuadrada no es negativo. Es decir, podríamos tener algo del tipo:
x = b^2-4ac
r = -b/2a
i = sqrt(x)
entonces, si x >= 0 podemos calcular las dos raices de la forma acostumbrada... pero si x < 0, entonces tenemos número imaginario... dado que ya tienes separada la parte imaginaria es facil conformar el número complejo:Código (c) [Seleccionar]
double _Complex resimag1 = r + i * I;
double _Complex resimag2 = r - i * I;
Correcto, pero originalmente programator11 quería hacerlo utilizando la clase complex, que ya tiene preparadas funciones para no tener que preocuparse de separar la parte imaginaria de la real. Con la clase complex, puedes hacer la raiz cuadrada de un número negativo o complejo tranquilamente, sin realizar tú las comprobaciones.