#include<iostream>
#include<math.h>
using namespace std;
int main() {
float a, b, c, x_positiva = 0, x_negativa = 0;
cout << "Digite el valor de a: "; cin >> a;
cout << "Digite el valor de b: "; cin >> b;
cout << "Digite el valor de c: "; cin >> c;
x_positiva = (-b + (sqrt(pow(b, 2) - (4 * a * c)))) / (2 * a);
x_negativa = (-b - (sqrt(pow(b, 2) - (4 * a * c)))) / (2 * a);
cout << "\n x_positiva es: " << x_positiva << endl;
cout << "\n x_negativa es: " << x_negativa << endl;
system("pause>0");
return 0;
}
- 1,543
- 3
- 10
- 25
- 13
- 3
-
Nicolás, he agregado una posible solución al tema, por favor échale un ojo. – Excorpion Feb 11 '21 at 14:03
2 Answers
EDIT* He encontrado un duplicado exacto de tu ejercicio y problema:
Nan como resultado de una raiz (sqrt) al resolver una ecuación cuadrática
Agrego, que en esa publicación mencionan el uso de complex
para resolver el problema. He testeado y he conseguido esto: (verificar)
#include<iostream>
#include<math.h>
#include<complex>
using namespace std;
int main() {
double a, b, c;
cout << "Introduce a: \n";
cin >> a;
cout << "Introduce b: \n";
cin >> b;
cout << "Introduce c: \n";
cin >> c;
auto x1 = (-b + sqrt(complex((b*b) - (4 * a*c))))/(2*a);
cout << "\n x1 es: " << x1 << endl;
}
Estás intentando hacer raíces cuadradas de números negativos,
Esto termina generando un NAN (Not a number)
Operaciones que crean NaN:
Los siguientes casos pueden generar el estado de NaN en la mayoría de los lenguajes de programación que acepten este estado como retorno de una función matemática:
- Aplicando funciones que excedan el dominio de la misma. Por ejemplo, la raíz cuadrada de un número negativo
Realizando en caso de prueba, con a, b y c de valor 2, encontré que esto si sucede:
Abajo te dejo el debug, para que veas como calculé el problema...
Digite el valor de a: 2
Digite el valor de b: 2
Digite el valor de c: 2
x_calculada es: 4
x_calculada es: -12
x_calculada es: -nan
x_positiva es: -nan
x_negativa es: -nan
.
#include<iostream>
#include<math.h>
using namespace std;
int main() {
float a, b, c, x_positiva = 0, x_negativa = 0, x_calculada = 0;
cout << "Digite el valor de a: "; cin >> a;
cout << "Digite el valor de b: "; cin >> b;
cout << "Digite el valor de c: "; cin >> c;
x_calculada = pow(2, 2);
cout << "\n x_calculada es: " << x_calculada << endl;
x_calculada = x_calculada - (4*2*2);
cout << "\n x_calculada es: " << x_calculada << endl;
x_calculada = sqrt(x_calculada);
cout << "\n x_calculada es: " << x_calculada << endl;
x_positiva = (-b + (sqrt(pow(b, 2) - (4 * a * c)))) / (2 * a);
x_negativa = (-b - (sqrt(pow(b, 2) - (4 * a * c)))) / (2 * a);
cout << "\n x_positiva es: " << x_positiva << endl;
cout << "\n x_negativa es: " << x_negativa << endl;
system("pause>0");
return 0;
}
- 4,240
- 1
- 8
- 27
Al hacer la raiz cuadrada de un número negativo da como resultado -nan(ind), por ejemplo:
a = 5
b = 5
c = 5
al hacer sqrt(pow(b, 2) - (4 * a * c))
estás intentando hacer la raíz cuadrada de un número negativo.
- 3
- 1