################################################################################ ### R BASICS WORKSHOP ### ### EJERCICIO 3.2: EL PRIMER CÍRCULO DEL INFIERNO DE R ### ### ### ### ### ### Center for Conservation and Sustainable Development ### ### Missouri Botanical Garden ### ### Sitio en la red: rbasicsworkshop.weebly.com ### ################################################################################ ### INTRODUCCIÓN ############################################################### # Según Dante, la siguiente inscripción se encuentra en las puertas del infierno, # anunciando lo que hay tras ellas: # # "Per me si va ne la città dolente, # per me si va ne l'etterno dolore, # per me si va tra la perduta gente..." # # En el Primer Círculo del Infierno de R están los paganos que ignoran los Dioses # de la precisión numérica (página 9 en Burns, P. 2011. The R Inferno). Si usted # es uno de ellos, arrepiéntase, haga este ejercicio. ################################################################################ ## TAREA 1 ## # La representación finita de los numeros produce error numérico. # Los computadores utilizan el formato de "punto flotante" ("floating point # representation") para aproximar los números reales con precisión limitada (es # decir, con precisión finita). Examine la representación finita de 1/3, usando # el argumento "digits" de la function "print" (visite la página de ayuda de la # función "print"): 1/3 print(1/3, digits=10) print(1/3, digits=16) ## TAREA 2 ## # La representación finita de los números afecta las operaciones. # Examine los dos números que se encuentran a continuación, ¿son iguales? 0.1 0.3/3 # vea lo que pasa al utilizar un operador para determinar si son iguales: 0.1 == 0.3/3 # "Pero, cómo es esto posible?!" dicen los paganos en el Primer Círculo de Infierno. # Si usted se encuentra allí, salga. Para ello examine cuidadosamente la diferencia # entre estos dos números: 0.1 - 0.3/3 # examine también la representación numérica de los dos números: print(0.1, digits=16) print(0.3/3, digits=16) ## TAREA 3 ## # Explore la precisión finita de su computadora. En todos los casos que encontrará a # continuación usted sabe que la respuesta debe ser mayor que cero. Determine el momento # en el que su computadora le dice que la respuesta es cero (una respuesta erronea). En ese # momento, usted excedió el límite de la precisión de su computadora: 1e-10 print(1e-10, digits=20) 1e-11 print(1e-11, digits=20) 1e-12 print(1e-12, digits=20) 1e-20 print(1e-20, digits=20) 1e-40 print(1e-40, digits=20) #siga incrementando la magnitud del exponente hasta que obtenga cero ## TAREA 4 ## # Esta tarea es similar a la anterior. En todos los casos que encontrará a continuación # usted sabe que la respuesta es "TRUE". Determine cuándo su computadora le da la respuesta # equivocada: 1+1e10 > 1e10 1+1e11 > 1e11 1+1e12 > 1e12 #siga incrementando la magnitud del exponente hasta que obtenga "FALSE" ## TAREA 5 ## # ¿Cuándo empieza el infinito? Justo después del mayor número que es posible representar con el # formato de punto flotante (floating point number). Explore el comienzo del infinito en su # computadora: incremente gradualmente el numero a continuación hasta que alcance el infinito: 1e300 1e301 1e302 1e303 1e304 1e305 1e306 1e307 1e308 1e309 # recuerde, sinembargo, que las operaciones con infinito producen resultados con sentido matemático # apropiado, y son útiles en varios contextos, por ejemplo: log(0) exp(-Inf) Inf/0 0/Inf ## TAREA 6 ## # Aprenda la lección fundamental de este ejercicio: R tiende a esconder el error numérico y, por lo # tanto, es fácil olvidar que tal error existe. No olvide el error numérico (página 11 in Burns, P. # 2011. The R Inferno). # # Cuando esté realizando operaciones con números representados con el formato de punto flotante # (es decir operaciones con números reales no enteros), tenga cuidado. Comparaciones de tales # números con operadores como "==" pueden causar problemas. Cuando esté realizando operaciones # con números que se supone son enteros, puede ser útil emplear la función "round" para asegurarse # que la computadora está representando los números como enteros (y no con el formato de punto # flotante). Visite la página de ayuda para la función "round". Si le interesa leer más sobre # error numérico y el formato de punto flotante, visite: # http://www.burns-stat.com/documents/tutorials/impatient-r/more-r-key-objects/more-r-numbers/ # http://www.math.pitt.edu/~trenchea/math1070/MATH1070_2_Error_and_Computer_Arithmetic.pdf