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?
Seguramente me equivocaré, pero afí va. La salida es
true
false
false
Tengo dudas sobre todo en el 3er caso.
Ahora lo voy a probar en VS
A ver… Esto tiene truco… 😉
Creo que dan false los tres… Cuando haya más respuestas, cuento por qué… Pero una pista es:
1001100110011001…
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!
Acabo de aterrizar de Ibiza de unas minivacaciones impresionantes (y en las cuales de paso he escrito