Finito o infinito, qué más da si lo puedes calcular.

Me gustaría proponeros un pequeño problema. Hablando con algunos amigos, me he dado cuenta de que no tenemos una idea de la infinitud muy adecuada. Cada vez que alguien está resolviendo un problema de cálculo y aparece nuestro querido ocho horizontal, soltamos un bufido y hacemos uso del árbol genealógico del profesor. Por cosas como esa tenemos la impresión de que “infinito” es un monstruo inmanejable que nos impide realizar cualquier cálculo en el que aparezca.

En concreto, hace unos días, afirmé que el cálculo de operaciones en los que intervengan infinitos sumandos pueden ser no solo resolubles, sino que su resultado es conocido sin ningún esfuerzo.

Imaginemos que una cucaracha… vaya mira que no hay animales… un adorable Panda :) camina 4 metros. Eso es lo mismo que decir que ha caminado 1m + 1m + 1m + 1m. Intuitivamente sabemos que si a un “algo” le quitamos la mitad, siempre le quedará otra mitad exactamente igual a la que hemos sustraído. Es decir, si tenemos un roscón de reyes y cada vez que pasamos delante de él, nos llevamos la mitad, siempre quedará roscón de reyes (ahí tenéis un truco gratis para ahorrar :p).
Es decir, podemos afirmar que si el Panda caminó una distancia X=4, podemos realizar una suma de las mitades de esa distancia hasta que nos aburramos: 2 + 1 + 0.5 + 0.25 […] y así hasta infinito pero, conocemos su resultado final, 4.

Esa es la demostración más simple que se me ha ocurrido para probar que las sumas de infinitos sumandos tienen un resultado determinado. En este caso, si solo nos dieran la fórmula y el primer término, el cálculo sería directo, pues es 2*X1, lo que no tengo nada claro es que todas las sumas de infinitos sumandos puedan ser calculadas.

Sin valernos de ningún truco (como el de 2*X1) estaremos de acuerdo en que necesitamos un número infinito de sumas para llegar a 4. ¿Podríamos construir un programa de ordenador que siga esa fórmula y llegue a un resultado concreto antes de que nos muramos?
La lógica nos dice que no deberíamos de ser capaces de ello, entonces… ¿por qué lo logra el siguiente código?

     float distancia = 4;
float resultado = 0;
System.out.println("La distancia inicial es: " + distancia);
while(resultado < 4){
distancia = distancia / 2;
resultado += distancia;
System.out.println("El resultado actual es: " + resultado);
}

Venga, que el reto es simple :)

Por Carballude

Me llamo Pablo Carballude González, soy graduado en computación con master en HCI y Seguridad Informática. Actualmente trabajo para Amazon en Seattle como Software Developer Engineer. Soy de esas personas que no saben si los textos autobiográficos deben ser en primera o tercera persona. Lo intenté en segunda, pero no le entendí nada :P

3 comentarios

  1. En la EUITIO vaya como os hacen pensar, os va a estallar el cerebro con estas cuestiones tan complicadas.

    Lamentablemente, la precisión es finita ;)

  2. Has leido sobre las paradojas de Zenón?
    http://es.wikipedia.org/wiki/Paradojas_de_Zen%C3%B3n

    Has cursado programación declarativa?
    Si no lo has hecho no te la pierdas. Labra se motiva mucho con lo de manejar el infinito.

    En haskell puedes declarar una funcion que genere una lista de infinitos números y, desde otra función sumar sus diez primeros elementos. La evaluación perezosa evita el cuelgue que se produciría en java (por ej.)

  3. Sí, sí, he cursado programación declarativa con Labra en el primer cuatrimestre, aunque este año no vimos tanto Haskell como otros.

Dejar un comentario

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