Comiendo nueces para siempre

Así que en una materia en la que llevamos dinámica de sistemas, se nos planteó este problema:

Tienes un bowl con 100 nueces, decides comerte la mitad de las nueces que haya en el bowl cada hora, en cuánto tiempo te quedarás sin nueces?

Intuitivamente es fácil darse cuenta que, si puedes comer fracciones de nueces, estarás comiendo nueces para siempre… y si no confías en la intuición, la fórmula:

n(t) = n_0 / 2^t

que indica la cantidad de nueces que quedarán en la hora “t”, no tiene solución para 0.

Sabiendo esto, pregunto “puedo comerme medias nueces?” a lo que el lic. responde “no :|”. Me llevo las manos a la cabeza viendo a la hoja de papel con mis rudimentarios cálculos… “zomg! nunca aprendí a manejar correctamente los números enteros :S”…

Para salir del apuro, pienso: “bueno… cuando quede una sola nuez en el bowl, una hora después, me habré comido todas las nueces :D”, igualo la función a 1, la despejo para t, y le sumo 1 hora… el resultado? 7 horas!

Pero, no me convence, (de hecho, el error de este resultado crecerá proporcionalmente a la cantidad inicial de nueces en el bowl)… así que hago una simulación rudimentaria a mano:

horas   0     1     2     3     4     5     6     7
nueces  100,  50,   25,   12,   6,    3,    1,    0

yay! le achunté! :D… le muestro al lic, y me dice “no… sale más!”. Me rompo la cabeza intentando sacar más horas…

Tiempo más adelante, nos muestra su solución, y se ve algo así…

nueces1

“nos acabaremos las nueces, más o menos, después de 10 horas…”

Paso el resto de la clase intentando llegar a ese resultado de “10 horas”… hago una simulación “rudimentaria” en C++

#include <iostream>
#include <cmath>

using namespace std;

int main () {
  int n = 100;
  int h = 0;

  while (n > 0) {
    h++;
    n = floor(n/2);
    cout << "hr " << h << " " << n << endl;
  }

  return 0;
}

El resultado? las nueces llegan a 0 después de 7 horas… “pero… lic, hice una simulación rudimentaria en c++, y da 7 horas”… a lo que responde “ese es el problema! *rudimentaria*… hazlo en vencim, y hablamos”… no me gusta el vencim :S pero creo que voy a tener que usarlo esta vez, para demostrar mi punto…

nueces

usando vencim, me di cuenta que el gráfico que nos mostró asumía que sí podemos comer “medias nueces”, y, auque inicialmente sí parecía que acabaremos las nueces a las 10 horas, haciendo zoom, pareciera que acabaremos las nueces después de 10 horas, haciendo otro zoom, después de 12, otro zoom! y después de 14

nueces2nueces3.pngnueces4.png

Bueno… ahora solo tengo que pedirle al vencim que coma “nueces enteras” cada hora… no encuentro la función “floor”, pero sí encuentro la función “integer”… como lo redondea, cuando quede 1 sola nuez, redondeará 0.5 a 0, así que, según vencim, siempre habrán nueces en el bowl XD

nueces-enteras

rayos… creo que ni así puedo probar mi punto :S según el vencim, nunca acabaré las nueces! XD y ahora? si me pasa esto en el examen? cómo voy a encontrar la respuesta correcta? D:

Tal vez tenga que seguir el consejo de donkeysharp: “si quieres aprobar tus materias, tienes que apagar tu cerebro” T_T

Advertisements

One thought on “Comiendo nueces para siempre

  1. Haciendo pruebas y modificaciones a tu código en JS y su cuestionado punto flotante

    for (var h=1, n = 100; n != 0; h++) {
    n /= 2;
    console.log(“Nueces: “, n, ” Hora:”, h);
    }

    resulta que las nueces se acaban en 1082h, no me convence y lo hago en java y su alagada precisión double y resulta que igual me sale 1082h :|

    Al final lo que el docente ve es la gráfica en vensim (que si usa fracciones en la división) como resultado y aparentemente son “10h” pero nunca se le ocurrió hacer zoom a la gráfica xD

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s