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); Si los valores son los siguientes:
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
|