Autor
|
Tema: Una mano por favor , ejercicio de c (Leído 2,858 veces)
|
kevinlll6
Desconectado
Mensajes: 1
|
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? #include <stdio.h> #include <stdlib.h> using namespace std; int main()//Accion Operacion Cuatro cositas { float op1,op2,rpta,res2; char op; printf("Ingrese la operacion que desee realizar\n"); printf("Ejemplo: 2 + 3\n \n"); switch(op) { case '+': ; printf("\nOPERACION SUMA: \n \n"); printf("%6.1f + %6.1f =",op1 ,op2 ); if(rpta==op1+op2) { } else { } break; case '-': printf("\nOPERACION RESTA: \n \n"); printf("%6.1f - %6.1f =",op1 ,op2 ); if(rpta==op1-op2) { } else { } break; case '*': res2=op1*op2; printf("\nOPERACION MULTIPLICACION: \n \n"); printf("%6.2f * %6.2f =",op1 ,op2 ); if(rpta==op1*op2) { } else { } break; case '/': if(op2!=0) { printf("\nOPERACION DIVISION: \n \n"); printf("%6.1f / %6.1f =",op1 ,op2 ); if(rpta==op1/op2) { } else { } } else { printf("\nOPERACION IMPOSIBLE,NO SE PUEDE DIVIDIR ENTRE 0\n"); } break; default: printf("\nOPERADOR DESCONOCIDO\n"); } return 0; }
|
|
« Última modificación: 22 Agosto 2014, 06:58 am por kevinlll6 »
|
En línea
|
|
|
|
Caster
|
Antes de nada, esto va en el foro Programación C/C++. Estás programando en C, así que esta línea sobra, eso es de C++. using namespace std;
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.
|
|
« Última modificación: 22 Agosto 2014, 12:10 pm por Caster »
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
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. printf("%6.1f + %6.1f =",op1 ,op2 );
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.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[MOD] por favor necesito ayuda!!! me podeis echar una mano? mi dvd no lee vcd
Multimedia
|
nerokt
|
2
|
1,883
|
14 Febrero 2005, 01:51 am
por arda-lothi
|
|
|
¿Me echáis una mano con este ejercicio de un libro?
Redes
|
OmarHack
|
0
|
2,138
|
4 Marzo 2013, 13:21 pm
por OmarHack
|
|
|
Ejercicio devc++ una mano con un error
Ejercicios
|
linkwollf
|
2
|
2,854
|
2 Octubre 2014, 00:08 am
por linkwollf
|
|
|
Ayuda con ejercicio! POR FAVOR!
Programación C/C++
|
Trompasl
|
3
|
2,916
|
8 Mayo 2016, 23:34 pm
por MAFUS
|
|
|
ayuda por favor con un ejercicio, dev c++
Programación C/C++
|
raenriquez4
|
8
|
5,467
|
22 Agosto 2016, 06:20 am
por AlbertoBSD
|
|