Foros del Web » Programación para mayores de 30 ;) » C/C++ »

un bug??!

Estas en el tema de un bug??! en el foro de C/C++ en Foros del Web. que tal, hace unos momentos estaba de metiche con un maestro cuando estaba dando un taller y les empezo a explicar lo de los ordenes ...
  #1 (permalink)  
Antiguo 17/09/2009, 13:36
Avatar de lukas4  
Fecha de Ingreso: octubre-2008
Ubicación: frente al pc
Mensajes: 496
Antigüedad: 15 años, 6 meses
Puntos: 12
un bug??!

que tal, hace unos momentos estaba de metiche con un maestro cuando estaba dando un taller y les empezo a explicar lo de los ordenes y todo eso, y pregunto cuanto daba la siguente ecuacion para los alumnos de programacion I:

2+(2/4)*1-2*2;

y como yo soy medio holgazan, yo me dispuse a programarla en mi viejo amigo Turbo C/C++ y el resultado ese me dio -2, dado que debe dar -1.5, y entonces llegamos a la conclusion de que la parte de 2/4 en lugar de hacerla .5 como corresponde, la hace a 0, lo cual es incorrecto, pero si lo hacemos de esta manera:

x=2 y z=4; y=x/z AQUI si nos da 0.5, y le comente esto a un amigo, y lo hizo en C# y dijo que a el tambien le dio -2, yo lo hice en php y ahi si me da -1.5.

bueno, solo era para comentar y si alguien sabe el porque, pues no estaria mal en aclararnos esa duda, hasta luego

Última edición por lukas4; 18/09/2009 a las 01:49 Razón: error de dedo al escribir la ecuacion :P
  #2 (permalink)  
Antiguo 17/09/2009, 14:44
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años
Puntos: 5
Respuesta: un bug??!

hola lukas4

imagino que el problema es que lo quieres guardar en una variable tipo int cuando haces 2/4, lo intentaste guardar en un tipo float (creo que es asi en turbo c) o double??

saludos, nos comentas como te fue
__________________
Bienvenidos los karmas.
Quejas, sugerencias o dudas, se awantan......
  #3 (permalink)  
Antiguo 17/09/2009, 14:44
Avatar de lukas4  
Fecha de Ingreso: octubre-2008
Ubicación: frente al pc
Mensajes: 496
Antigüedad: 15 años, 6 meses
Puntos: 12
Respuesta: un bug??!

si, lo guarde como tipo flotante, y daba 0 :S
  #4 (permalink)  
Antiguo 18/09/2009, 01:41
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
De acuerdo Hay que revisar bien la expresión

Hola,

Según la expresión que colocas el resultado debería ser el siguiente:

2-(2/4)*1-2*2

2
-(2/4)*1=-0.5
-2*2=-4

luego:

2-0.5-4= -2.5

De cierta forma el resultado de C es correcto, pero al manejar todo dentro de una misma expresión, al parecer nos encontramos con un problema de precisión. Y lo de php si que es raro que te haya dado ese resultado siendo errado totalmente. Espero haber sido de ayuda
__________________
En programación hay mil y un formas de hacer lo mismo...

Última edición por fradve; 18/09/2009 a las 02:09
  #5 (permalink)  
Antiguo 18/09/2009, 01:48
Avatar de lukas4  
Fecha de Ingreso: octubre-2008
Ubicación: frente al pc
Mensajes: 496
Antigüedad: 15 años, 6 meses
Puntos: 12
Respuesta: Hay que revisar bien la expresión

Cita:
Iniciado por fradve Ver Mensaje
Hola,

2-(2/4)*1-2*2
solo que es: 2+(2/4)*1-2*2 me ekivoke yo al ponerlo :P
  #6 (permalink)  
Antiguo 18/09/2009, 02:12
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Error de precisión o redondeo innecesario

Cita:
Iniciado por lukas4 Ver Mensaje
solo que es: 2+(2/4)*1-2*2 me ekivoke yo al ponerlo :P
jeje, pues creo que también. Pues puede ser que realiza un redondeo como si se tratara de un entero. Devolvamole a gloria a PHP,
__________________
En programación hay mil y un formas de hacer lo mismo...
  #7 (permalink)  
Antiguo 18/09/2009, 02:28
Avatar de lukas4  
Fecha de Ingreso: octubre-2008
Ubicación: frente al pc
Mensajes: 496
Antigüedad: 15 años, 6 meses
Puntos: 12
Respuesta: un bug??!

pero porke lo esta redondeando como si fuese entero, si la variable yo la declare como flotante?
  #8 (permalink)  
Antiguo 18/09/2009, 15:31
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: un bug??!

El tema esta en que ni 2 ni 4 son flotantes (son enteros) asi que el 0.5 se pierde, ejemplo simple:

Código:
float x = 2 / 4;
printf("%f\r\n", x);
Usando flotantes:
Código:
float x = 2.0 / 4.0;
printf("%f\r\n", x);
Código:
float x = 2.0 + (2.0 / 4.0) * 1.0 - 2.0 * 2.0;
printf("%f\r\n", x);
C++ still rules
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 18/09/2009, 15:34
Avatar de lukas4  
Fecha de Ingreso: octubre-2008
Ubicación: frente al pc
Mensajes: 496
Antigüedad: 15 años, 6 meses
Puntos: 12
Respuesta: un bug??!

osease que apra que funcione bien ocupo ponerle decimales ( no lo puedo probar ahora porque no tengo C++ en mi laptop) pero gracias por el dato ;)
Cita:
Iniciado por Eternal Idol Ver Mensaje
C++ still rules
nadie dice lo contrario
  #10 (permalink)  
Antiguo 18/09/2009, 15:36
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: un bug??!

Si, de esa manera el numero es flotante, tambien podrias hacer un casting a float.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:02.