Título: Una mano por favor , ejercicio de c Publicado por: kevinlll6 en 22 Agosto 2014, 06:54 am Hola disculpen estoy empezando en c ,y a la hora de querer compilar este programa , tengo problemas en el área de multiplicación , por ejemplo 4.1*3 deberia dar igual a 12.3 , pero me arroja un resultado 12.29999 , ahora 3.4*1.1
3.74 , pero no lo reconoce , y así hay mas números que fallan , pero no todos , porque sucede esto? Código
Título: Re: Una mano por favor , ejercicio de c Publicado por: Caster en 22 Agosto 2014, 12:06 pm Antes de nada, esto va en el foro Programación C/C++ (http://foro.elhacker.net/programacion_cc-b49.0/).
Estás programando en C, así que esta línea sobra, eso es de C++. Código
Y vamos al problema en sí: las operaciones fallan, creo, por la precisión de los decimales, y digo creo porque no tengo mucha idea sobre el tema. Para solucionarlo prueba a declarar las variables como double en vez de como float. Otra cosa aparte, en la línea 18 debajo del "case'+':" hay un ";" que creo que tampoco pinta nada ahí. Saludos. Título: Re: Una mano por favor , ejercicio de c Publicado por: eferion en 2 Septiembre 2014, 12:01 pm Como te dijo Caster, el problema es de precisión.
Quizás, antes de realizar operaciones con decimales deberías aprender cómo se almacenan éstos números y que problemas pueden aparecer. Los números en coma flotante permiten almacenar números bastante grandes / pequeños incluso con decimales... pero a cambio sacrifica precisión. Si quieres reducir esta pérdida de precisión puedes probar a usar double en vez de float. Código Tu ahí estás forzando a que en el número se imprima únicamente hasta el primer decimal... pero eso no quiere decir que el número real almacenado en op1 y op2 vayan a tener un número con un decimal... la conversión a coma flotante puede hacer que el número almacenado no sea exactamente el que esperas. A modo de ejemplo: un float tiene una precisión de 6 dígitos, esto quiere decir que un número, por ejemplo el 1 puede acabar representado dentro del rango 0.999990 y 1.000009. O el número 12.3, este número puede acabar representado por un número cualquiera dentro del rango 12.29990 y 12.30009. Lo dicho, si esta precisión te da problemas, cambia a double. |