Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: diegoCmC en 18 Febrero 2012, 17:08 PM

Título: Duda con "cast" en C
Publicado por: diegoCmC en 18 Febrero 2012, 17:08 PM
Me parece que no entendi bien del todo eso del cast, ilustro mi idea con codigo a ver si alguien me puede corregir

Citar#include<stdio.h>

main()
{
      float numero=12.5, numero2=1.2;
      int division;
     
      division=(int)numero/numero2;
     
      printf("El valor de la division es %d\n", division);
     
      system("pause");
      return 0;
}

Cuando ejecuto este código, la idea que tengo yo es, que antes de realizar la división numero/numero2, lo que realiza es convertir numero a un entero de valor 12, y numero2 a un entero de valor 1, por lo tanto al dividirlos se almacenaria el resultado, 12, en la variable división, pero sin embargo el programa me muestra como resultado 9.
A ver is alguien puede ayudarme
Título: Re: Duda con "cast" en C
Publicado por: Eternal Idol en 18 Febrero 2012, 17:23 PM
Para que haga lo que queres numero2 tiene que ser entero, a ver si asi lo ves mas claro:
division = (int)numero / (int)numero2;
Título: Re: Duda con "cast" en C
Publicado por: diegoCmC en 18 Febrero 2012, 17:30 PM
ahhh vale, ya entiendo lo que me pones, gracias.
Ahora como curiosidad, como lo tenia yo, por que el resultado es 9??
Título: Re: Duda con "cast" en C
Publicado por: Caster en 18 Febrero 2012, 17:31 PM
Yo sabía lo de Eternal Idol pero, me entra la imsa duda que a diego.

Saludos
Título: Re: Duda con "cast" en C
Publicado por: diegoCmC en 18 Febrero 2012, 17:32 PM
claro, es que 12/1.2=10 no se por que pone 9 :S
Título: Re: Duda con "cast" en C
Publicado por: Eternal Idol en 18 Febrero 2012, 17:52 PM
Es un problema de precision, si usas double te va a dar 10, con float la division da algo asi como 9.99999960263572 ...
Título: Re: Duda con "cast" en C
Publicado por: farresito en 19 Febrero 2012, 16:59 PM
Sí. Como bien dice Eternal, a nivel muy bajo, el procesador tiene problemas de precisión. Si tienes que hacer casts con el int, por ejemplo, a veces va bien sumar 0.0001 o algo así. Cifras bajas.. Recuerda que un cast NO es redondear, es TRUNCAR (quitar todos los decimales a secas). Si tienes 10.0001 y haces un cast de int, te saldra 10, pero si tienes 9.99999, te quedaras con el 9.

Un abrazo.