0
#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;
}
Jesús
  • 1,543
  • 3
  • 10
  • 25

2 Answers2

1

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;
}
Excorpion
  • 4,240
  • 1
  • 8
  • 27
0

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.

Timer
  • 3
  • 1