Foro de elhacker.net

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
Código:
#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:
Código
  1. 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.