Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: EdgarKrieger en 4 Noviembre 2013, 05:15 am



Título: Duda en la impresion en pantalla
Publicado por: EdgarKrieger en 4 Noviembre 2013, 05:15 am
Hola a todos ::) ::), bueno soy nuevo en esto de la programación y en linux, mi duda es cuando ejecuto mi programa el resultado que me da es -nan que es eso :huh: :huh: y a  que se debe ese resultado :huh: :huh: :huh:

mi programa es:

#include<stdio.h>
#include<math.h>
int main()
{
        float a,b,c,res1,res2;
        printf("Introduce los valores de a,b,c\n");
        printf("Valor de A ==> ");scanf("%f",&a);while(getchar()!='\n');
        printf("Valor de B ==> ");scanf("%f",&b);while(getchar()!='\n');
        printf("Valor de C ==> ");scanf("%f",&c);while(getchar()!='\n');
        res1 = (-b+sqrt(b*b-4*a*c))/(2*a);
        res2 = (-b-sqrt(b*b-4*a*c))/(2*a);
        printf("Positivo %f\n",res1);
        printf("Negativo %f\n",res2);
        return 0;
}


y el resultado es:

Introduce los valores de a,b,c
Valor de A ==> 1
Valor de B ==> 2
Valor de C ==> 3
Positivo -nan
Negativo -nan


Título: Re: Duda en la impresion en pantalla
Publicado por: $trunk en 4 Noviembre 2013, 08:54 am
Un saludo.

El problema está en la raíz cuadrada:
Código:
res1 = (-b+sqrt(b*b-4*a*c))/(2*a);
        res2 = (-b-sqrt(b*b-4*a*c))/(2*a);

Si los valores son los siguientes:
  • a = 1
  • b = 2
  • c = 3

Entonces, te está quedando así:
Código:
res1 = (-2 + sqrt((2*2) - (4*1*3))) = -2 + sqrt(4 - 12)

Es decir, que estás intentando calcular una raíz cuadrada negativa, y eso no se puede hacer.
NaN significa "Not A Number", que viene a ser algo así como "no es un número", y Linux lo printa cada vez que haces una operación ilegal, como dividir por cero o una raíz cuadrada negativa, como es el caso. El resultado no es un número (según la teoría matemática es infinito o -infinito, de ahí el -nan), y por eso te saca el NaN. Windows, por su parte, te sacaría un #IND. Para más información sobre esto: http://www.johndcook.com/IEEE_exceptions_in_cpp.html


Título: Re: Duda en la impresion en pantalla
Publicado por: dato000 en 5 Noviembre 2013, 01:39 am
NaN significa "Not A Number

Significa que el resultado de la raiz cuadrada es negativo, o se esta dividiendo por cero, el problema no es de programación ni lógica estructura, es lógica aritmetica, se trata de un problema matematico amigo mio  :silbar: :silbar:

Citar
a = 1
b = 2
c = 3


Citar
res1 = (-b+sqrt(b*b-4*a*c))/(2*a);
res2 = (-b-sqrt(b*b-4*a*c))/(2*a);

res1 = ( -2   +   sqrt ( 2*2  - 4*1*3 ) )  / (2*1)
       = ( -2   +  sqrt  ( 4 - 12 ) ) /   2
       = ( -2   +  sqrt  ( -8 ) ) / 2

----> Una raiz cuadrada no es posible cálcularla con números reales mayores de cero, es decir, no funciona con números negativos, a menos que uses números complejos y uses el imaginario i

Intenta usar otros valores y comprueba con lapiz y papel los resultados


Título: Re: Duda en la impresion en pantalla
Publicado por: EdgarKrieger en 27 Noviembre 2013, 20:25 pm
Gracias por la ayuda me sirvió de mucho y si ya me di cuenta en que estaba mal  :silbar: :silbar: gracias dato000