contando hacia atras
Vaya, este artículo debería haberlo publicado hace unos días, cuando muchos de vosotros sí que os estábais preparando para la cuenta atrás... de final de año, claro. Espero que me perdonéis, pero estoy un poco griposillo así que no me ha dado instancia a dedicar tiempo a escribir.
Aun así: ¡aprovecho para felicitaros a todos desde aquí y desear que los 0x757B12C00 milisegundos de este 2007 os sean propicios! }:)

El caso es que, continuando con el emocionante tema de los tipos de datos, he pensado en dejaros un pequeño puzzler para empezar el año. Os recuerdo que la idea de los puzzlers es responder a las preguntas sobre el código sin ejecutarlo primero (y si sois capaces ademas de saber qué hace, saber el por qué... ¡son gallifantes extra!)
Al igual que en el problema anterior, podéis publicar la solución en vuestro blog y enlazarla desde un comentario aquí o bien enviarlas directamente como comentario del artículo. En cualquier caso, intentaremos comentar la solución entre todos }:)
Pero basta ya de preámbulos: la idea es que tenemos estos tres pedacitos de código:
| pedacito #1 |
int counter = (int)1e8; while(counter > 0) { counter--; } Console.WriteLine("counter: " + counter); |
| pedacito #2 |
float counter = (float)1e8; while(counter > 0) { counter--; } Console.WriteLine("counter: " + counter); |
| pedacito #3 |
double counter = (double)1e8; while(counter > 0) { counter--; } Console.WriteLine("counter: " + counter); |
¿Sabríais decir cuál será la salida de cada uno de ellos? Y ya puestos: ¿sabríais decir cuál tardará MENOS y cual MÁS en ejecutarse?
NOTA: tal y como estan expresados, estos pedacitos deberían ejecutarse sin problemas en C#, Java, C y C++ (simplemente cambiando la última línea por la llamada a System.out.println, printf o cout << apropiada). ¡Siento no haber podido hacer versiones en otros lenguajes!