expansiones infinitas

Para los que ya le han echado un ojo al problema anterior y han leido los comentarios sobre las expansiones (hey! recuerdo que si no habeis probado sin leer pistas primero es hacer trampa!) os dejo otro pequeño puzzler sobre el tema.

Imaginemos un trocito de codigo como:

double result1 = 3.65d + 0.05d;
float result2 = 3.65f + 0.05f;

Console.WriteLine(result1 == 3.7d);
Console.WriteLine(result2 == 3.7f);
Console.WriteLine(result1 == result2);

¿Sabríais decir cuál será la salida que obtendremos al ejecutar?

4 comentarios en “expansiones infinitas”

  1. A ver… Esto tiene truco… 😉

    Creo que dan false los tres… Cuando haya más respuestas, cuento por qué… Pero una pista es:

    1001100110011001…

  2. hola,

    creo que en el primer caso da ‘false’ porque no redondea (porque el dato ‘double’ se representa con más dígitos), no? el segundo sí que da ‘true’ y el tercero es consecuencia de la primera comparación.

    En VC#, creo que double ocupa 64 bits (IEEE754 de doble precisión. según arquitectura del pentium, la FPU usa: 1 bit signo, 19 bits exponente, y el resto, mantisa), y el dato float son 32 bits.

    de todos modos, supongo que en una comparación de tipos diferentes, el dato de menor precisión se pasa a mayor precisión (float -> double) y se hace la comparación, no?.

    agur!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *