{VERSION 3 0 "IBM INTEL LINUX" "3.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 }{CSTYLE "2D Comment" 2 18 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "Define" -1 256 "" 0 0 163 163 163 0 1 1 0 0 0 0 0 0 0 } {CSTYLE "Emphasis" -1 257 "" 0 0 128 0 128 1 0 0 0 0 0 0 0 0 0 } {CSTYLE "Maple Input" -1 258 "Courier" 0 0 255 0 0 1 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 259 "" 1 14 0 0 39 0 0 0 2 0 0 0 0 0 0 }{CSTYLE "" -1 260 "" 1 14 0 0 0 0 0 0 2 0 0 0 0 0 0 }{CSTYLE "" -1 261 "" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 }{CSTYLE "" -1 262 "" 0 20 0 0 0 0 0 0 2 0 0 0 0 0 0 }{CSTYLE "" -1 263 "" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 }{CSTYLE " " -1 264 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 265 "" 1 18 0 0 0 0 0 1 1 0 0 0 0 0 0 }{CSTYLE "" -1 266 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 267 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE " " -1 268 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 269 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 270 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 271 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE " " -1 272 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" 18 273 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" 18 274 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 275 "" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE " " -1 276 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 277 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 278 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 279 "" 1 12 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE " " -1 280 "" 1 12 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 281 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 282 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 283 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE " " -1 284 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 285 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 286 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 287 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 288 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 289 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 290 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 291 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 292 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 293 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 294 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 295 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 296 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 297 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 298 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 299 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 300 "" 1 12 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 301 "" 1 12 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 302 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 303 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 304 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 305 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 306 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 307 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 308 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 309 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 310 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 311 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 312 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 313 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 314 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 315 "" 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 316 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 317 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 322 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 323 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 324 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Heading 1" 0 3 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 0 0 0 0 0 0 0 }1 0 0 0 8 4 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 2" 3 4 1 {CSTYLE "" -1 -1 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 8 2 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 3" 4 5 1 {CSTYLE "" -1 -1 "" 1 12 0 0 0 0 1 0 0 0 0 0 0 0 0 }0 0 0 -1 0 0 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple O utput" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Title" 0 18 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 1 0 0 0 0 0 0 }3 0 0 -1 12 12 0 0 0 0 0 0 19 0 }{PSTYLE "Author" 0 19 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 8 8 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 4" 5 20 1 {CSTYLE "" -1 -1 "" 1 10 0 0 0 0 1 0 0 0 0 0 0 0 0 }0 0 0 -1 0 0 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 256 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {PARA 18 "" 0 "" {TEXT -1 0 "" }{TEXT 261 0 "" }{TEXT 262 31 " LABORATORIO DE CALCULO NUMERICO" }}{PARA 19 "" 0 "" {TEXT -1 0 "" }} {PARA 19 "" 0 "" {TEXT 265 65 "Representacion en coma flotante: determ inacion de sus parametros." }}{PARA 19 "" 0 "" {TEXT -1 0 "" }{TEXT 263 0 "" }{TEXT -1 0 "" }}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 0 "" } {TEXT 264 30 "Introduccion e inicializacion." }}{PARA 0 "" 0 "" {TEXT -1 91 "En esta pr\341ctica vamos a explorar diversos aspectos de la re presentaci\363n en m\341quina de los " }}{PARA 0 "" 0 "" {TEXT -1 85 " n\372meros reales y los errores que surgen de las limitaciones de dich a representaci\363n.\n" }}{PARA 0 "" 0 "" {TEXT -1 125 "En primer luga r reinicializamos el sistema y cargamos el paquete (plots) necesario p ara \nla presentacion de algunos graficos:" }}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 10 "restart():" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "re adlib(log10): with(plots):" }{TEXT -1 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 1 " " }{MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 1 {PARA 4 "" 0 "" {TEXT 259 55 "Un sencillo problema financiero: ilust racion de errores" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 90 "Supongamos qu e se os presenta la oportunidad de hacer la siguiente inversi\363n. Se hace una " }}{PARA 0 "" 0 "" {TEXT -1 97 "aportaci\363n inicial \372n ica de (e-1)=1.7183... pts. El primer a\361o se multiplica dicho capit al por 1 " }}{PARA 0 "" 0 "" {TEXT -1 93 "y se deduce 1 peseta por gas tos. El segundo se multiplica el capital por 2 siendo los gastos " }} {PARA 0 "" 0 "" {TEXT -1 96 "otra vez de 1 pts. En a\361os sucesivos e l capital se multiplica por 3,4,5, etc. y siempre restamos" }}{PARA 0 "" 0 "" {TEXT -1 90 "una peseta de gastos. A los 25 a\361os recuperais la inversi\363n. La pregunta es determinar si " }}{PARA 0 "" 0 "" {TEXT -1 94 "dicha inversi\363n es rentable. En principio, parece que \+ simplemente es una cuesti\363n de escribir " }}{PARA 0 "" 0 "" {TEXT -1 37 "una sencilla subrutina del estilo de:" }}{PARA 0 "" 0 "" {TEXT -1 2 " " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "capital :=proc(n)" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " local s,k; s:=exp(1.0)-1.0;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 " for k from 1 to n do s:=s*k-1.0; \+ od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " RETURN(s):" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 4 "end:" }{TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{PARA 11 "" 1 "" {TEXT -1 0 "" }{MPLTEXT 1 0 0 "" }{TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 95 "Un programa igual al ant erior se ha ejecutado en varias maquinas con los siguientes resultados :" }}{PARA 0 "" 0 "" {TEXT -1 1 " " }}{PARA 0 "" 0 "" {TEXT -1 71 "Cas io FX100 -> -140 billones pts." }}{PARA 0 "" 0 "" {TEXT -1 69 "Casio FX3600 \+ -> -7120 billones pts." }}{PARA 0 "" 0 "" {TEXT -1 64 "Pentium II (simple precision) -> 568650 billones pts." }}{PARA 0 " " 0 "" {TEXT -1 66 "Pentium II (doble precision ) -> -22 42 billones pts." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 78 "Como se ve, los resultados no son muy concluyentes. Veamo s que nos dice MAPLE:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "beneficio:=evalf(capital(25)):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 49 "printf(\"Resultado inversion = %e pts\",benefici o);" }}{PARA 0 "" 0 "" {TEXT -1 1 " " }{MPLTEXT 1 0 0 "" }}}{PARA 11 " " 0 "" {TEXT -1 0 "" }{MPLTEXT 1 0 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 85 "Vemos que Maple opina lo mismo que la Casio FX3600, pero aparte de eso no terminamos" }}{PARA 0 "" 0 "" {TEXT -1 94 "de ver cl ara la inversion. Este es un ejemplo de un c\341lculo sencillo (multip licar por enteros " }}{PARA 0 "" 0 "" {TEXT -1 94 "peque\361os, restar 1) pero altamente inestable, dando resultados totalmente distintos e n cuanto" }}{PARA 0 "" 0 "" {TEXT -1 46 "alteramos la precisi\363n o c ambiamos de m\341quina." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 81 "Existe en MAPLE la opcion de hacer los calculos llam ando directamente al hardware" }}{PARA 0 "" 0 "" {TEXT -1 74 "en vez d e usar los recursos MAPLE, evaluando la expresion con la funcion " } {TEXT 270 9 "evalhf() " }}{PARA 0 "" 0 "" {TEXT -1 10 "en vez de " } {TEXT 271 9 "evalf(). " }{TEXT -1 16 "Probemos a ver: " }{MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "beneficio:=evalhf(capital(25 )):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 62 "printf(\"Resultado Inversion (hardware) = %e pts\\n\",beneficio);" }{TEXT -1 0 "" }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 2 " " }{MPLTEXT 1 0 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 61 " Vemos que tenemos otro resultad o mas que a\361adir a la lista. " }}{PARA 0 "" 0 "" {TEXT -1 52 "\277C oincide con alguno de los anteriores? \277Por que? " }}{PARA 0 "" 0 "" {TEXT -1 84 "Probad a calcular la inversion con ambas funciones pe ro ahora para solo cinco a\361os." }}{PARA 0 "" 0 "" {TEXT -1 32 "\277 Coinciden ahora los resultados?" }{MPLTEXT 1 0 0 "" }}}{PARA 11 "" 1 " " {TEXT -1 0 "" }}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 71 "\277Cu\341nto n os da realmente el banco por cada 1.72 pts al cabo de 25 a\361os?" }} {PARA 0 "" 0 "" {TEXT -1 122 " Lo que les diga el ordenador, dependien te de su software/hardware/sistema operativo. \+ " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 0 {PARA 5 "" 0 " " {TEXT -1 73 "Supongamos (improbable) que en el banco hay alguien que sabe lo que hace." }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 78 "Alguien hac e los siguientes calculos: Aplicando recursivamente la regla dada " }} {PARA 0 "" 0 "" {TEXT -1 54 "a un capital inicial, en el a\361o n el b anco nos adeuda:" }}{PARA 0 "" 0 "" {TEXT -1 54 " \+ " }{XPPEDIT 18 0 "C(n) = n!*C-n!*Sum( 1/k!,k = 1 .. n);" "6#/-%\"CG6#%\"nG,&*&-%*factorialG6#F'\"\"\"F%F-F-* &-F+6#F'F--%$SumG6$*&\"\"\"F--F+6#%\"kG!\"\"/F8;\"\"\"F'F-F9" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 82 "Pero aqui el ca pital inicial C es precisamente (e-1) y desarrollando e por Taylor" } }{PARA 0 "" 0 "" {TEXT -1 25 " e = " }{XPPEDIT 18 0 "Sum(1/k!,k = 0 .. infinity);" "6#-%$SumG6$*&\"\"\"\"\"\"-%*factoria lG6#%\"kG!\"\"/F,;\"\"!%)infinityG" }{TEXT -1 55 " \+ luego C = e -1 = " }{XPPEDIT 18 0 "Sum(1/k!,k = 1 .. infinity);" "6#-%$SumG6$*&\"\"\"\"\"\"-%*factorialG6#%\"kG!\"\"/F,;\" \"\"%)infinityG" }}{PARA 0 "" 0 "" {TEXT -1 26 "y el capital final es \+ : " }{XPPEDIT 18 0 "C(n) = n!*Sum(1/k!,k = n+1 .. infinity);" "6#/-% \"CG6#%\"nG*&-%*factorialG6#F'\"\"\"-%$SumG6$*&\"\"\"F,-F*6#%\"kG!\"\" /F4;,&F'F,\"\"\"F,%)infinityGF," }{TEXT -1 6 " = " }{XPPEDIT 18 0 " 1/(n+1);" "6#*&\"\"\"\"\"\",&%\"nGF%\"\"\"F%!\"\"" }{TEXT -1 6 " + \+ " }{XPPEDIT 18 0 "1/((n+1)*(n+2));" "6#*&\"\"\"\"\"\"*&,&%\"nGF%\"\"\" F%F%,&F(F%\"\"#F%F%!\"\"" }{TEXT -1 10 " + ... " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 84 "Aproximando por el primer termino de la solucion resulta que tras invertir 1.71 pts." }}{PARA 0 "" 0 "" {TEXT -1 60 " tras 25 a\361os nos devuelven unicamente 4 ce ntimos (=1/26). " }}{PARA 0 "" 0 "" {TEXT -1 78 "Numericamente el prob lema surge por la cancelacion de terminos muy similares " }}{PARA 0 " " 0 "" {TEXT -1 11 "(suma de 1:" }{XPPEDIT 18 0 "infinity;" "6#%)infin ityG" }{TEXT -1 69 " frente a la suma de 1: n) que da lugar a un resu ltado muy peque\361o, " }}{PARA 0 "" 0 "" {TEXT -1 85 "con pocas cifra s significativas. Al multiplicar dicho resultado por una cantidad muy \+ " }}{PARA 0 "" 0 "" {TEXT -1 50 "grande (n!) los errores se magnifican enormemente." }}}{PARA 11 "" 1 "" {TEXT -1 0 "" }}}}{PARA 4 "" 0 "" {TEXT -1 0 "" }}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 60 "Repeticion de los calculos con diversas precisiones en MAPLE" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 158 "Repitamos ahora los calculos a nteriores pero estipulando diversas precisiones a\ntraves de la variab le del MAPLE Digits que por defecto tiene un valor de 10.\n" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "for i from 5 to 40 by 5 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 11 " Digits:=i:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 49 " b1:=evalf(capital(25)): b2:=evalhf(capital(25)):" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 " printf(\"Dig %2d Maple:%9.2e Har d:%9.2e\\n\",i,b1,b2);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "Digits:=10:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }{MPLTEXT 1 0 0 "" }{TEXT -1 77 "Cambiar el valor de Dig its para varios valores entre 5 y 50. \277Que sucede? " }}{PARA 0 " " 0 "" {TEXT -1 80 "\277Cambian los resultados de evalhf() al modifica r el valor de Digits? \277Por que? " }}{PARA 0 "" 0 "" {TEXT -1 83 " \277Para que numero de digitos empieza se acerca el resultado a los 4 \+ centimos que son" }}{PARA 0 "" 0 "" {TEXT -1 85 "la verdadera solucion ? Si para ese numero de digitos preguntamos por el rendimiento " }} {PARA 0 "" 0 "" {TEXT -1 72 "a 50 a\361os (solucion = 0.02) \277obten emos el resultado correcto? \277Por que?" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 90 "La raz\363n de los problemas que n os han aparecido a lo largo de este apartado reside en que" }}{PARA 0 "" 0 "" {TEXT -1 90 " los n\372meros no enteros son almacenados de f orma no exacta dentro del ordenador siendo las" }}{PARA 0 "" 0 "" {TEXT -1 95 "operaciones entre ellos igualmente inexactas (esto es cie rto para todos los n\372meros salvo para " }}{PARA 0 "" 0 "" {TEXT -1 120 "un subconjunto despreciable).\n\nEn el siguiente apartado realiza mos un sencillo ejercicio que identificar\341 a ese peque\361o " }} {PARA 0 "" 0 "" {TEXT -1 68 "conjunto de n\372meros cuya representaci \363n en el ordenador es exacta. " }}}{PARA 0 "" 0 "" {TEXT -1 0 "" } }{SECT 1 {PARA 3 "" 0 "" {TEXT 281 57 "Conceptos basicos de una repres entacion en coma flotante." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 282 102 " En una representaci\363n en c oma flotante, un n\372mero real se representa con bit de signo (s), v arios " }}{PARA 0 "" 0 "" {TEXT 294 98 "bits que definen un n\372mero \+ entero entre -algo y +algo (el exponente e) y una mantisa m, expresada " }{TEXT -1 1 " " }}{PARA 0 "" 0 "" {TEXT 292 101 "en una cierta base B (usualmente 2, ocasionalmente 10, en casos m\341s raros 8 \363 16). Juntos representan" }}{PARA 0 "" 0 "" {TEXT 295 17 "el n\372mero real r:" }}{PARA 0 "" 0 "" {TEXT 283 66 " \+ " }{XPPEDIT 18 0 "r = (-1)^s*m*B^e;" "6#/%\"rG*(),$\"\"\"!\"\"%\"sG\"\"\"%\"mGF+)%\"BG%\"eGF+" }{TEXT 284 98 "\n Los digitos de la mantisa corresponden a coeficientes en la ba se correspondiente. Por ejemplo, " }}{PARA 0 "" 0 "" {TEXT 293 61 "si \+ B=2, la mantisa m=1.01 equivale (en notacion decimal) a :" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 285 14 " \+ m = 1 * " }{XPPEDIT 18 0 "2^0;" "6#*$\"\"#\"\"!" }{TEXT 287 10 " \+ + 0 * " }{XPPEDIT 18 0 "2^(-1);" "6#)\"\"#,$\"\"\"!\"\"" }{TEXT 286 9 " + 1 * " }{XPPEDIT 18 0 "2^(-2);" "6#)\"\"#,$\"\"#!\"\"" } {TEXT 288 16 " = 1 + " }{XPPEDIT 18 0 "1/4;" "6#*&\"\"\"\"\" \"\"\"%!\"\"" }{TEXT 289 9 " = 1.25" }{TEXT -1 0 "" }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 95 "Usando base 3, la misma mantisa corresponde a 1 + 1/9 = 1.11111111..., mientras que si la ba se" }}{PARA 0 "" 0 "" {TEXT -1 66 "elegida es B=10, tenemos que m = 1 +1/100 = (sorpresa!) = 1.01. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 92 "Se observa que siempre podr\355amos multi plicar la mantisa por B, B^2, etc. y restar 1,2, etc." }}{PARA 0 "" 0 "" {TEXT -1 93 "al exponente, quedandonos con el mismo n\372mero (o dividir por B incrementando el exponente). " }}{PARA 0 "" 0 "" {TEXT -1 82 "Por ejemplo, usando base 10, el numero 15.0 puede escribirse \+ como (m=1.5, e=1), " }}{PARA 0 "" 0 "" {TEXT -1 93 "(m=0.15 e=2), (m= 150 e=-1) , (m=15, e=0) , etc. Para conseguir una representacion unic a se " }}{PARA 0 "" 0 "" {TEXT -1 95 "suele impone que el primer digit o de la mantisa represente unidades y que sea no nulo, esto es," }} {PARA 0 "" 0 "" {TEXT -1 94 "la mantisa toma valores en el intervalo [ 1,B). Con este convenio el numero 15 solo se puede" }}{PARA 0 "" 0 "" {TEXT -1 66 "representar con una mantisa m=1.5 (1<= m <10) y un ex ponente e=1." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 92 " Esto no influye mucho al usar p.e. una base 10. En ese caso e l primer digito de la mantisa" }}{PARA 0 "" 0 "" {TEXT -1 100 "puede v ariar entre 1-9 y hay que representarlo. Sin embargo, al utilizar un a base 2, si el primer " }}{PARA 0 "" 0 "" {TEXT -1 47 "digito no pued e ser 0 y deber ser menor que 2, " }{TEXT 290 15 "solo puede ser " } {TEXT -1 34 "1. Y si siempre debe ser 1, \277para " }}{PARA 0 "" 0 "" {TEXT -1 96 "que gastar un bit en recordarlo? Muchas representaciones binarias omiten dicho bit, ganando un " }}{PARA 0 "" 0 "" {TEXT -1 43 "bit adicional en la mantisa a costa de ese " }{TEXT 291 12 "bit fa ntasma" }{TEXT -1 44 ". En este caso, si la mantisa guardada es m," }} {PARA 0 "" 0 "" {TEXT -1 37 "entendemos que la mantisa real es 1.m" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 93 " Una rep resentacion en coma flotante solo es capaz de representar exactamente \+ un subconjunto" }}{PARA 0 "" 0 "" {TEXT -1 98 " de los numeros reales \+ (los que se ajuste a la formula anterior con las limitaciones impuesta s al " }}{PARA 0 "" 0 "" {TEXT -1 70 " rango del exponente y al numero de digitos admisible para la mantisa." }}{PARA 0 "" 0 "" {TEXT -1 87 " El siguiente ejemplo pondra de manifiesto cual es ese conjunto de nu meros exactamente " }}{PARA 0 "" 0 "" {TEXT -1 94 "representables, lo \+ que nos permitira conocer algunos aspectos de la representacion subyac ente " }}{PARA 0 "" 0 "" {TEXT -1 20 "en nuestra maquina. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 0 {PARA 4 "" 0 "" {TEXT 260 60 "El caso de la serie inestable y su pecul iar comportamiento. " }}{PARA 0 "" 0 "" {TEXT -1 1 " " }{TEXT 266 90 " Nos planteamos el problema de calcular la siguiente serie, definida \+ recursivamente como:" }}{PARA 4 "" 0 "" {TEXT 272 29 " \+ " }{XPPEDIT 273 0 "y(n+2) = y(n+1)*(m+1/m)-y(n)" "6#/-%\" yG6#,&%\"nG\"\"\"\"\"#F),&*&-F%6#,&F(F)\"\"\"F)F),&%\"mGF)*&\"\"\"F)F2 !\"\"F)F)F)-F%6#F(F5" }{TEXT -1 5 " " }{TEXT 267 16 "con y(0) = \+ 1, " }{TEXT -1 1 " " }{XPPEDIT 274 0 "y(1) = 1/m;" "6#/-%\"yG6#\"\"\"* &\"\"\"\"\"\"%\"mG!\"\"" }{TEXT -1 23 " " }} {PARA 0 "" 0 "" {TEXT -1 107 "donde m es un n\372mero entero. Se pue de comprobar facilmente que, para esos valores iniciales nuestra serie " }}{PARA 0 "" 0 "" {TEXT -1 55 " genera las sucesivas potencias inver sas de m, esto es," }}{PARA 0 "" 0 "" {TEXT -1 75 " \+ " }{XPPEDIT 18 0 "y(n) = (1/m)^n;" "6#/-%\"yG6#%\"nG)*&\"\"\"\"\"\"%\"mG!\"\"F'" } }{PARA 0 "" 0 "" {TEXT -1 31 "Escribamos una peque\361a rutina, " } {TEXT 268 11 "met1(B,n), " }{TEXT -1 67 "que calcula la potencia n-esi ma de 1/m usando la formula anterior:" }{MPLTEXT 1 0 0 "" }{TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "met1:=proc(B,n)" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " local y0,y1,k,sig,factor; " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 " y0:=1.0; y1:=1.0/B; factor:= B+1 /B;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " for k from 2 to n do " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " sig:=y1*factor-y0; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 21 " y0:=y1; y1:=sig;" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 6 " od; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " RETUR N(sig);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" } {MPLTEXT 1 0 0 "" }{TEXT -1 78 "Una serie con distinta definicion pero con la misma soluci\363n es simplemente " }{XPPEDIT 18 0 "y(n+1) = \+ y(n)/m;" "6#/-%\"yG6#,&%\"nG\"\"\"\"\"\"F)*&-F%6#F(F)%\"mG!\"\"" } {TEXT -1 18 " , con y(0) = 1." }}{PARA 0 "" 0 "" {TEXT -1 64 "La cor respondiente subrutina que la implementa es la siguiente, " }{TEXT 305 10 "met2(B,n) " }{TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "met2:=proc(B,n)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " local y0,k,sig; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 11 " y0:=1.0; \+ " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " for k from 1 to n do " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 " sig:=y0/B; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " y0:=sig;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " od; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " RETURN(sig);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 98 "Corramos ambas rutinas para un par de valores de m y n, \+ comprobando que funcionan adecuadamente: " }{MPLTEXT 1 0 0 "" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "met1(10,2); met2(2,2);" } {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 333 "Ahora vamos a \+ elegir un valor de B y observaremos los resultados obtenidos al aplic ar los dos metodos anteriores a calcular las sucesivas potencias inve rsas de B. El c\341lculo lo repetiremos para distintas precisiones (u sando la variable Digits). Para ver mejor los resultados los represent amos en una grafica logaritmica en el eje " }}{PARA 0 "" 0 "" {TEXT -1 209 "de las Y (de forma que las potencias inversas de B deberian ca er en una recta de pendiente negativa, siempre decreciente). Probemos en primer lugar con B=2 y precisiones correspondientes a Digits=4, 8 \+ y 12]. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "base:=7: hasta:=24: " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "dig:=[4,8,12]:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 66 "data1:=[seq([seq([2*i,met1(base,2*i)],i=1 ..hasta/2)],Digits=dig)]:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 66 "data2: =[seq([seq([2*i,met2(base,2*i)],i=1..hasta/2)],Digits=dig)]:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 62 "plo t1:=logplot(data1,color=[red,blue,green],title=`METODO 1`):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 62 "plot2:=logplot(data2,color=[red,blue,gree n],title=`METODO 2`):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "display(array(1..2,[plot1,plot2]));" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }{TEXT -1 0 "" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 114 "A la izquierda se presentan los resultados obten idos para la primera serie para las tres precisiones. A la derecha" }} {PARA 0 "" 0 "" {TEXT -1 105 "tenemos los resultados del segundo m\351 todo, tambi\351n para las tres precisiones. Corred ambos m\351todos p ara " }}{PARA 0 "" 0 "" {TEXT -1 111 "B = 2, 4, 7 y 10. Anotad en la s iguiente tabla si creeis que el m\351todo est\341 haciendo las cosas \+ bien (OK) o mal" }}{PARA 0 "" 0 "" {TEXT -1 109 "(XX) en funci\363n de lo que veis en las gr\341ficas. Si pensais que lo est\341 haciendo ma l indicad para que potencia" }}{PARA 0 "" 0 "" {TEXT -1 39 "empiezan a estropearse los resultados. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 4 " " }{TEXT 256 182 " B \+ 2 \+ 4 7 \+ 10 " }{TEXT -1 14 " " }}{PARA 0 "" 0 " " {TEXT -1 86 "_______________________________________________________ _______________________________" }}{PARA 0 "" 0 "" {TEXT -1 35 " \+ Dig = 4" }}{PARA 0 "" 0 "" {TEXT -1 25 " Meto do 1 Dig = 8" }}{PARA 0 "" 0 "" {TEXT -1 36 " \+ Dig = 12" }}{PARA 0 "" 0 "" {TEXT -1 86 "_____________________ _________________________________________________________________" }} {PARA 0 "" 0 "" {TEXT -1 35 " Dig = 4" }} {PARA 0 "" 0 "" {TEXT -1 25 " Metodo 2 Dig = 8" }}{PARA 0 "" 0 "" {TEXT -1 36 " Dig = 12" }}{PARA 0 "" 0 "" {TEXT -1 86 "____________________________________________________ __________________________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 97 "\277Que m\351todo parece funcionar mejor? \277Qu\351 efecto tiene aumentar la precisi\363n en uno u otro m\351t odo?" }}{PARA 0 "" 0 "" {TEXT -1 86 "_________________________________ _____________________________________________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 " " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 86 "_________________________________________ _____________________________________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }{MPLTEXT 1 0 0 "" } {TEXT -1 105 "Lo que est\341 ocurriendo es que, a pesar de ser matem \341ticamente equivalentes, el segundo de los m\351todos es " }}{PARA 0 "" 0 "" {TEXT -1 108 "estable, mientras que el primero es lo que se denomina inestable. Ocurre que en realidad hay dos posibles " }} {PARA 0 "" 0 "" {TEXT -1 107 "soluciones para el primer m\351todo (an tes de imponer las condiciones iniciales): una (la \"deseada\") son la s " }}{PARA 0 "" 0 "" {TEXT -1 110 "potencias inversas de m, (1/m)^n, mientras que la otra son sus potencias directas, m^n. Con las condic iones " }}{PARA 0 "" 0 "" {TEXT -1 115 "iniciales dadas la \372nica so luci\363n posible matem\341ticamente es la de las potencias inversas. Sin embargo, cualquier" }}{PARA 0 "" 0 "" {TEXT -1 220 "cambio (por \+ peque\361o que sea) en dichas condiciones iniciales o en cualquiera de los y(n) que se van calculando introducen una peque\361a componente de la segunda soluci\363n. Comoquiera que los valores de dicha soluci \363n son " }}{PARA 0 "" 0 "" {TEXT -1 104 "mucho m\341s grandes que l os de la \"verdadera\", terminar\341n predominando, por lo que los y( n) obtenidos se " }}{PARA 0 "" 0 "" {TEXT -1 36 "alejar\341n de los ( 1/m)^n esperados.\n" }{TEXT 316 0 "" }}{PARA 0 "" 0 "" {TEXT -1 88 "Si n embargo, hay un B para el que el m\351todo 1 parece funcionar corre ctamente. \277Cu\341l es?" }}{PARA 0 "" 0 "" {TEXT -1 104 "Podemos com probar que para ese caso las cosas siguen funcionando incluso para pre cisiones bajas o si nos" }}{PARA 0 "" 0 "" {TEXT -1 44 "vamos muy adel ante (aumentando el par\341metro " }{TEXT 256 5 "hasta" }{TEXT -1 15 " ) en la serie." }}{PARA 0 "" 0 "" {TEXT -1 67 "\277Por qu\351 creeis \+ que la inestabilidad no se manifiesta para dicho B?" }}{PARA 0 "" 0 " " {TEXT -1 86 "_______________________________________________________ _______________________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 86 "_________________________ _____________________________________________________________" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 105 "Si no sa beis responder a la pregunta anterior, haced el siguiente experimento: MAPLE tiene una funcion, " }}{PARA 0 "" 0 "" {TEXT 256 9 "evalhf( ) " }{TEXT 257 2 ", " }{TEXT -1 89 "que permite calcular una expresion u sando directamente los recursos hardware del sistema " }}{PARA 0 "" 0 "" {TEXT -1 100 "(procesador matematico) en vez de las rutinas del pro pio MAPLE. Repitamos el experimento anterior " }}{PARA 0 "" 0 "" {TEXT -1 96 "puenteando a MAPLE y usando directamente el coprocesador \+ matematico (ahora no usamos distintas " }}{PARA 0 "" 0 "" {TEXT -1 71 "precisiones pues ese es un par\341metro que solo afecta a MAPLE). \+ Al usar " }{TEXT 315 9 "evalhf( )" }{TEXT 317 1 " " }{TEXT -1 19 " est amos usando la " }}{PARA 0 "" 0 "" {TEXT -1 45 "precisi\363n del copro cesador matem\341tico (fija)." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 109 "Al igual que antes vamos a correr la rut ina para B=2, 4, 7 y 10 anotando en la tabla vuestra opini\363n sobr e " }}{PARA 0 "" 0 "" {TEXT -1 66 "si el m\351todo est\341 desbarrando (XX) o haciendo las cosas bien (OK):" }}{PARA 0 "" 0 "" {TEXT -1 0 " " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "B:=7: hasta:=30: " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 53 "data1:=[seq([4*k,evalhf(met1(B,4*k))],k=1..hasta/4)]:" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 53 "data2:=[seq([4*k,evalhf(met2(B,4*k))],k=1..h asta/4)]:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 49 "plot1:=logplot(data1,t itle=`Metodo 1`,color=red):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 50 "plot 2:=logplot(data2,color=blue,title=`Metodo 2`):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "display(array(1..2,[plot1,plot2]));" }}{PARA 13 "" 1 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} {PARA 0 "" 0 "" {TEXT -1 7 " " }{TEXT 314 128 " B \+ 2 4 \+ 7 10" }}{PARA 0 "" 0 "" {TEXT -1 86 "__________________________________________________________________ ____________________" }}{PARA 0 "" 0 "" {TEXT -1 17 " Metodo 1 \+ " }}{PARA 0 "" 0 "" {TEXT -1 86 "_____________________________________ _________________________________________________" }}{PARA 0 "" 0 "" {TEXT -1 12 " Metodo 2" }}{PARA 0 "" 0 "" {TEXT -1 86 "____________ ______________________________________________________________________ ____" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 104 "\277Para qu\351 B's parece funcionar b ien ahora el segundo m\351todo? \277Que podemos decir tras este estudi o sobre " }}{PARA 0 "" 0 "" {TEXT -1 94 "la representaci\363n interna \+ en coma flotante usada por Maple? \277y por el coprocesador matem\341t ico?" }}{PARA 0 "" 0 "" {TEXT -1 86 "_________________________________ _____________________________________________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 86 "_____________________________________________________________________ _________________" }}{PARA 0 "" 0 "" {TEXT -1 1 " " }{MPLTEXT 1 0 0 " " }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 269 0 "" }}{SECT 0 {PARA 3 " " 0 "" {TEXT 296 67 "Determinacion de los parametros de una representa cion como flotante" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 297 88 "Aun que en el apartado anterior fuimos capaces de detectar en que base tra bajaba nuestra " }{TEXT -1 17 "representacion en" }}{PARA 0 "" 0 "" {TEXT -1 111 "coma flotante, el metodo era poco practico. Veremos a co ntinuacion algunos sencillos algoritmo que nos permiten" }}{PARA 0 "" 0 "" {TEXT -1 59 "hallar los diversos parametros de nuestra representa cion. " }}{PARA 0 "" 0 "" {TEXT -1 83 "En los siguientes algoritmos F P(x) indica la representacion en coma flotante de x: " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 26 "Determinacion \+ de la base B" }}{PARA 0 "" 0 "" {TEXT -1 2 " " }}{PARA 0 "" 0 "" {TEXT 276 73 "Algoritmo para determinar la base en que trabaja la repr esentaci\363n usada:" }}{PARA 0 "" 0 "" {TEXT -1 6 " " }}{PARA 0 "" 0 "" {TEXT 279 6 " " }{TEXT 300 1 "1" }{TEXT 301 1 "." }{TEXT 275 72 " Hallar la menor potencia de 2 tal que al sumarle 1 no cambie , esto es" }}{PARA 0 "" 0 "" {TEXT 277 53 " \+ FP ( " }{XPPEDIT 18 0 "2^P;" "6#)\"\"#%\"PG" } {TEXT 298 11 "+1 ) = FP( " }{XPPEDIT 18 0 "2^P;" "6#)\"\"#%\"PG" } {TEXT 299 17 ") " }{TEXT 280 9 " " }}{PARA 0 " " 0 "" {TEXT -1 6 " " }{TEXT 278 1 "2" }{TEXT -1 23 ". Ir sumand o a dicho " }{XPPEDIT 18 0 "2^P;" "6#)\"\"#%\"PG" }{TEXT -1 72 " las cantidades x = 2, 4, 8, ... hasta que notemos un cambio en la " } }{PARA 0 "" 0 "" {TEXT -1 97 " representacion coma flotante :\n B = FP( " }{XPPEDIT 18 0 "2^P;" "6#)\"\"#%\"PG" }{TEXT -1 11 "+x ) - FP( " }{XPPEDIT 18 0 "2^P;" "6#)\"\"#%\"PG" }{TEXT -1 158 ") < > 0\n La prime ra diferencia no nula, B, coincide con la base de la representacion.\n \n La siguiente rutina en MAPLE implementa este algoritmo:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "ha lla_base :=proc()" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " local p,x,sum a,base; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " p:=1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 51 " while (p+1.0 <> p) do p:=p*2.0; od; # halla \+ 2^p" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " x:=2.0; suma:=p+x;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 43 " while (suma = p) do x:=x*2; suma:=p+x; od;" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 16 " base:=(suma-p);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " RETURN (base);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }{TEXT -1 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 1 " " }{MPLTEXT 1 0 0 "" }}{PARA 0 "" 0 "" {TEXT -1 83 "Ejecutemos dicha rutina tanto en MAPLE como sob re el hardware (a traves de evalhf):" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 49 "printf(\"\\n BASE MAPLE \+ = %2.0f\",halla_base());" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 55 "print f(\" BASE HARDWARE = %2.0f\",evalhf(halla_base()));" }{TEXT -1 0 "" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 82 "_______________________________ ___________________________________________________" }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 105 " \277Base empleada por MAPLE ? \277Base empleada por el hardware? " }}{PARA 0 "" 0 "" {TEXT -1 86 "__________________ ____________________________________________________________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 41 "Numero de digitos dedicados a la mantisa." }}{PARA 0 "" 0 "" {TEXT -1 106 " La eleccion de una base u otra es una decision que no a fecta a la precision alcanzable. Como sabemos la" }}{PARA 0 "" 0 "" {TEXT -1 107 "precision esta directamente relacionada con el numero de digitos usados en la mantisa. El algoritmo para " }}{PARA 0 "" 0 " " {TEXT -1 25 "hallarlo es muy sencillo:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 86 " 1. Elevar la base B antes hall ada hasta que la representacion en coma flotante de " }}{PARA 0 "" 0 " " {TEXT -1 11 " ( " }{XPPEDIT 18 0 "B^m;" "6#)%\"BG%\"mG" } {TEXT -1 36 "+ 1 ) no se diferencie de la de ( " }{XPPEDIT 18 0 "B^m ;" "6#)%\"BG%\"mG" }{TEXT -1 22 " ), esto es: FP ( " }{XPPEDIT 18 0 "B^m;" "6#)%\"BG%\"mG" }{TEXT -1 11 "+1 ) = FP( " }{XPPEDIT 18 0 "B^ m;" "6#)%\"BG%\"mG" }{TEXT -1 3 " )." }}{PARA 0 "" 0 "" {TEXT -1 172 " \n 2. El menor m para el que se cumple lo anterior da los digitos dedicados a la mantisa.\n\nEscribamos un peque\361o programa en MAPLE que implementa el algoritmo anterior:" }}{PARA 0 "" 0 "" {TEXT -1 0 " " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "mantisa:=proc(base)" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " local p,m;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 " p:=base; m:=1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 48 " while ((p+1.0) <> p) do p:=p*base; m:=m+1; od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " RETURN(m);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }{TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 1 " " } {MPLTEXT 1 0 0 "" }{TEXT -1 92 "Ejecutemos dicho programa sobre MAPLE \+ y sobre el hardware, para distintos valores de Digits:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "Digits:=32:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "M1:=mantisa(halla_base()):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "M2:=evalhf(mantisa(halla_base())):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "printf(\"Digits = %2d\",Digits);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 44 "printf(\" Mantisa Maple %2d digitos \",M1): " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "printf(\" Mantisa Hard %2.0f d igitos \",M2); " }{TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 84 "__________________________________________________________________ __________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 1 " " }{TEXT 306 21 " Digits " }{TEXT -1 47 " \+ " }{TEXT 322 79 " 4 \+ 8 16 32 \+ " }}{PARA 0 "" 0 "" {TEXT -1 85 " ____________________________________ ________________________________________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 2 " " }{TEXT 307 21 "Digitos Mantisa Maple" }{TEXT -1 8 " " }}{PARA 0 "" 0 "" {TEXT -1 84 " ______________________________________________________________________ ______________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 2 " " }{TEXT 308 24 "Digitos mantisa hardware" }{TEXT -1 2 " " }}{PARA 0 "" 0 "" {TEXT -1 84 "___________________________________ _________________________________________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 4 " " }}{PARA 0 "" 0 "" {TEXT -1 80 " \277 Varian en algo los digitos de la mantisa en hardwa re al cambiar la variable " }{TEXT 309 6 "Digits" }{TEXT -1 35 "? \277 Y en MAPLE?\n\277 Para que valor de " }{TEXT 256 8 "Digits " }{TEXT -1 62 "pensais que MAPLE ser\341 tan preciso como el hardware? \277Por qu\351?" }}{PARA 0 "" 0 "" {TEXT -1 85 "_____________________________ ________________________________________________________" }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 85 "_______________________________ ______________________________________________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 1 {PARA 5 "" 0 "" {TEXT -1 6 " Pista" }} {PARA 5 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 86 "Notad que los digitos de la mantisa estan referidos a la base correspondiente, \+ por lo " }}{PARA 0 "" 0 "" {TEXT -1 93 "que los 53 digitos del hardwa re son 53 digitos binarios (0/1) mientras que por el contrario," }} {PARA 0 "" 0 "" {TEXT -1 88 "los X digitos del Maple estan referidos a la base 10 (0-9). Esto hace que el numero de " }}{PARA 0 "" 0 "" {TEXT -1 90 "digitos de la mantisa no baste para conocer la precision \+ de la maquina, al depender de la " }}{PARA 0 "" 0 "" {TEXT -1 96 "base utilizada. Por ello se usa otro parametro, la llamada precision o eps de la representacion." }{MPLTEXT 1 0 0 "" }{TEXT -1 0 "" }}}{PARA 0 " " 0 "" {TEXT -1 0 "" }}}{PARA 4 "" 0 "" {TEXT -1 0 "" }}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 36 "Precision de la representacion (eps)" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 102 "Como antes com entabamos, el numero de digitos de la mantisa no basta para conocer l a precision de la" }}{PARA 0 "" 0 "" {TEXT -1 105 "maquina, al depend er de la base utilizada. Por ello se suele usar otro parametro, la lla mada precision o " }{TEXT 310 3 "eps" }}{PARA 0 "" 0 "" {TEXT -1 53 "d e la representacion, que combina ambas informaciones" }{MPLTEXT 1 0 0 "" }{TEXT -1 1 "." }}{PARA 0 "" 0 "" {TEXT -1 3 "La " }{TEXT 302 4 "ep s " }{TEXT -1 96 "de la representacion se define como el numero mas pe que\361o que sumado a la unidad se diferencia " }}{PARA 0 "" 0 "" {TEXT -1 13 "de ella. La " }{TEXT 303 3 "eps" }{TEXT -1 91 " ser\341 \+ del orden del intervalo entre numeros exactamente representables en l os alrededores " }}{PARA 0 "" 0 "" {TEXT -1 15 "de la unidad. " }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 31 "Su estima cion es muy sencilla: " }}{PARA 0 "" 0 "" {TEXT -1 53 " 1. El sigui ente n\372mero m\341quina tr\341s el 1 es el " }{XPPEDIT 18 0 "1+B^ \{-m+1\};" "6#,&\"\"\"\"\"\")%\"BG<#,&%\"mG!\"\"\"\"\"F%F%" }{TEXT -1 39 " obtenido poniendo un 1 en la \372ltima " }}{PARA 0 "" 0 "" {TEXT -1 32 " posici\363n de la mantisa:" }}{PARA 0 "" 0 "" {TEXT -1 74 " 1.0 -> mantisa = 1.0000000.. .0000000 exp=0" }}{PARA 0 "" 0 "" {TEXT -1 69 " siguien te -> mantisa = 1.0000000...0000001 exp=0" }}{PARA 0 "" 0 "" {TEXT -1 50 " 2. Se trata de barrer el intervalo entre 0 y " } {XPPEDIT 18 0 "B^\{-m+1\};" "6#)%\"BG<#,&%\"mG!\"\"\"\"\"\"\"\"" } {TEXT -1 32 " hasta que FP(1 + eps) <> FP(1)." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "halla_eps:=p roc() " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " local eps,k,B,m,rango; \+ " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " B:=halla_base();" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " m:= mantisa(halla_base()); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 58 " rango:=1.0; for k from 1 to (m-1) do rango:=rango/B; od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " eps:=0.0; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 52 " while ( (1.0+eps) = 1.0) do eps:=eps+(rango/50); \+ " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " #printf(\"%e\\n\",eps);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " RETURN(eps);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" } {TEXT -1 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 88 "Hallemos la eps para varios valores de Digits, tanto pa ra Maple como para el hardware:" }}{PARA 0 "" 0 "" {TEXT -1 1 " " } {MPLTEXT 1 0 0 "" }{TEXT -1 1 " " }{MPLTEXT 1 0 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "Digits:=4:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "eps:=halla_eps(): " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "eps_h:= evalhf(halla_eps()):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "printf(\"Us ando %2d digitos:\",Digits);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "pri ntf(\" Eps Maple %e \",eps): " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 34 " printf(\" Eps Hard %e \",eps_h): " }{TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 11 "" 1 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 86 "_________________________________________ ____________________________________________ " }{TEXT 256 1 " " }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 256 18 "Digits \+ " }{TEXT -1 26 " " }{TEXT 323 94 " \+ 4 8 16 \+ 32 " }{TEXT -1 2 " " }}{PARA 0 "" 0 "" {TEXT -1 85 "__________________________________________________________________ ___________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 " " {TEXT 311 17 "Eps Maple " }}{PARA 0 "" 0 "" {TEXT -1 85 "____ ______________________________________________________________________ ___________" }}{PARA 0 "" 0 "" {TEXT 312 1 " " }}{PARA 0 "" 0 "" {TEXT 324 12 "Eps Hardware" }{TEXT -1 2 " " }}{PARA 0 "" 0 "" {TEXT -1 85 "_______________________________________________________________ ______________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 102 "\277 Para que valor de Digits se parecen las precis iones de la maquina y el hardware? \277Coincide nuestra" }}{PARA 0 " " 0 "" {TEXT -1 102 "respuesta con lo que dedujimos anteriormente estu diando el n\372mero de digitos de la mantisa? \277Por que?" }}{PARA 0 "" 0 "" {TEXT -1 105 " \277Cuantos \"digitos hardware\" precisamos \+ para compensar un \"digito Maple\"? \277De d\363nde viene esa relaci \363n? " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 97 "Visto lo anterior, \277 podemos deducir si la representaciones usa das en MAPLE y hardware truncan o " }}{PARA 0 "" 0 "" {TEXT -1 77 "red ondean al asignar un numero real a su representacion maquina mas proxi ma? " }}{PARA 0 "" 0 "" {TEXT -1 85 "_________________________________ ____________________________________________________" }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 " " }}{PARA 2 "" 0 "" {TEXT -1 85 "_____________________________________ ________________________________________________" }}}{SECT 0 {PARA 4 " " 0 "" {TEXT -1 59 "Rango del exponente: maximo y minimo numeros repre sentables" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 107 "El numero de digitos asignados a la mantisa nos daba la precision de la representacion. Por el contrario el" }}{PARA 0 "" 0 "" {TEXT -1 103 "maximo/minimo numero (positivo) representable vendra dado esen cialmente por el rango permitido para el" }}{PARA 0 "" 0 "" {TEXT -1 103 "exponente de la representacion en coma flotante. Para averiguarlo s podemos escribir un par de sencillas" }}{PARA 0 "" 0 "" {TEXT -1 109 "rutinas que detecten la maxima potencia (o potencia inversa) de l a base antes de un overflow (o underflow). " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 102 "La rutina siguiente halla prim eramente la base de la representacion subyacente B. Luego, simplement e " }}{PARA 0 "" 0 "" {TEXT -1 105 "calcula B^(-k) hasta que el result ado no se distingue de cero, devolviendo dicho exponente maximo. Para " }}{PARA 0 "" 0 "" {TEXT -1 79 "que sea mas rapida primero halla la \+ primera potencia de 2 verificando que B^(-" }{XPPEDIT 18 0 "2^k;" "6# )\"\"#%\"kG" }{TEXT -1 27 ") se anula y despues barre" }}{PARA 0 "" 0 "" {TEXT -1 99 "los exponentes desde -2^(k-1) hasta -2^k para enco ntrar el exponente exacto que causa underflow: " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "exp_min:=pro c()" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " local p,base,k,pprev,kmin; \+ " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " base:=halla_base();" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 36 " p:=1.0/base; pprev:=1.0/base; k:=0;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 44 "#Calculamos k tal que base^(-2^k) se anula. " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " while(p>0) " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " do " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 36 " pprev:= p;p:=pprev*pprev; k:=k+1; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 34 " # pr intf(\"%.0f -> %17.2e\\n\",k,p);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " od; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1 " " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 52 "#Empezando en 2^(k-1) vamos incrementando exponente \+ " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " p:=pprev; k:=2^(k-1);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 " while(p>0) do p:=p/base; k:=k+1; \+ od; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " kmin:=-(k-1);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " RETURN(kmin);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 1 " " }}{PARA 0 "" 0 "" {TEXT -1 107 " La rutina siguiente hace exactamente lo mism o pero para exponentes positivos, hallando el mayor exponente" }} {PARA 0 "" 0 "" {TEXT -1 59 "posible antes de que el numero se haga in finito (overflow):" }}{PARA 0 "" 0 "" {TEXT -1 1 " " }{MPLTEXT 1 0 0 " " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "exp_max:=proc()" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " local p,pprev,base,k; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 21 " base:=halla_base();" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 34 " p:=base; pprev=p; k:=0; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " while (p<>infinity) " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 43 " do pprev:=p; p:=pprev*pprev; k:=k+1; od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " p :=pprev; k:=2^(k-1);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 47 " while (p< >infinity) do p:=p*base; k:=k+1; od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 " RETURN((k-1));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 0 {PARA 5 "" 0 "" {TEXT -1 49 " \+ Aplicacion al hardware (coprocesador matematico)" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 32 "Corramos ambas rutinas so bre el " }{TEXT 304 8 "hardware" }{TEXT -1 20 ", usando evalhf(): " } {MPLTEXT 1 0 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "base:=ev alhf(halla_base()):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "m:=evalhf(ex p_min()): M:=evalhf(exp_max()):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 41 " printf(\"\\n Exponente minimo %5.0f\", m);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "printf(\" Exponente maximo %5.0f\",M);" }{TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }{TEXT -1 0 "" } {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 83 "_________________________ __________________________________________________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 113 "Minimo Exponente ? Maximo Exponente? " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 43 "N\372mero posible de exponentes? \+ " }}{PARA 0 "" 0 "" {TEXT -1 84 " ____________________________________ _______________________________________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 98 "Segun estos resultados, \+ \277cu\341ntos bits se estar\355an dedicando al exponente? \277Os pare ce normal dicho " }}{PARA 0 "" 0 "" {TEXT -1 30 "rango de exponentes? \+ \277Por qu\351?" }}{PARA 0 "" 0 "" {TEXT -1 84 " _____________________ ______________________________________________________________" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 84 "_________________________________________________________ ___________________________" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 1 {PARA 5 "" 0 "" {TEXT -1 0 "" }{TEXT 256 13 "Explicacion: " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 93 "Con los resulta dos anteriores pareceria que el rango permitido de exponente esta entr e -1074 " }}{PARA 0 "" 0 "" {TEXT -1 92 "y 1024, para un total de 2099 posibles exponentes. Esto parece muy raro, porque lo normal, " }} {PARA 0 "" 0 "" {TEXT -1 93 "en una representacion binaria como la del IEEE (doble precision) es que dediquemos un cierto " }}{PARA 0 "" 0 " " {TEXT -1 101 "numero de bits al exponente por lo que el rango deber ia ser una potencia de 2. El valor maximo 1023 " }}{PARA 0 "" 0 "" {TEXT -1 92 "(1024 est\341 reservado para indicar el infinito) parece \+ ok, pero lo logico seria que entonces " }}{PARA 0 "" 0 "" {TEXT -1 93 "el valor minimo deberia ser -1023 o algo asi, lo que corresponderia a un rango total de 2048 " }}{PARA 0 "" 0 "" {TEXT -1 90 "(11bits). Di cho rango cuadra ademas si lo sumamos a los 52 digitos binarios de m antisa " }}{PARA 0 "" 0 "" {TEXT -1 99 "(53 efectivos teniendo en cuen ta el bit fantasma) mas 1 bit para el signo, obteniendo un total de \+ " }}{PARA 0 "" 0 "" {TEXT -1 95 "52 + 1 +11 = 64 bits = 8 bytes que so n los dedicados a un numero real en doble precision para " }}{PARA 0 "" 0 "" {TEXT -1 34 "el standard IEEE de coma flotante." }}{PARA 0 "" 0 "" {TEXT -1 53 "\277Como es posible que podamos manejar numeros hast a " }{XPPEDIT 18 0 "10^(-1074);" "6#)\"#5,$\"%u5!\"\"" }{TEXT -1 17 " sin underflow?" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 256 "" 0 "" {TEXT -1 27 "La ruptura de la regla \+ del " }{TEXT 313 12 "leading bit " }{TEXT -1 3 "= 1" }}{PARA 0 "" 0 " " {TEXT -1 64 " Comentamos antes que en el standard IEEE se usa la tec nica del " }{TEXT 256 13 "leading bit " }{TEXT -1 24 "fastasma, enten diendose " }}{PARA 0 "" 0 "" {TEXT -1 93 "que siempre es 1. Siguiendo esta norma el numero mas peque\361o representable corresponderia a " }}{PARA 0 "" 0 "" {TEXT -1 94 "m=(1).00000... e=exp_min desde el qu e deberiamos pasar directamente al cero. Sin embargo, " }}{PARA 0 "" 0 "" {TEXT -1 100 "lo que se hace para conseguir un underflow mas suav e es permitir que si el numero a representar se " }}{PARA 0 "" 0 "" {TEXT -1 97 "hace mas peque\361o que Rmin podemos saltarnos esa regla , de forma que podemos conseguir numeros " }}{PARA 0 "" 0 "" {TEXT -1 105 "mas peque\361os violando la regla del primer digito de mantis a no nulo, pudiendo entonces llegar al numero " }}{PARA 0 "" 0 "" {TEXT -1 96 "mas peque\361o m=(0).00 ... 00001 e=exp_min. Por supues to debemos tener una forma de indicar que " }}{PARA 0 "" 0 "" {TEXT -1 102 "estamos violando la norma, ya que de otro modo la mantisa del numero anterior seria interpretada como" }}{PARA 0 "" 0 "" {TEXT -1 115 " (1).00 ... 00001. Para ello el standard IEEE (doble precision) \+ usa la siguiente codificacion para sus exponentes:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 80 "Exponente indicando overf low (infinito) --> 1024" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 40 "Exponentes donde se \+ usa el criterio de " }}{PARA 0 "" 0 "" {TEXT -1 73 "que el bit fantas ma es 1, mantisa =(1).m --> 1023 a -1022" }}{PARA 0 " " 0 "" {TEXT -1 1 " " }}{PARA 0 "" 0 "" {TEXT -1 40 "Exponente indican do que el bit fantasma " }}{PARA 0 "" 0 "" {TEXT -1 92 "pasa a valer 0 , luego la mantisa = (0).m --> -1023 \+ " }}{PARA 0 "" 0 "" {TEXT -1 106 " \+ ---- --------" }}{PARA 0 "" 0 "" {TEXT -1 99 "Rango total en los exponentes : --> 2048 = 11bits " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 79 "Si po nemos el exponente a -1023 estamos indicando que el numero represent ado " }}{PARA 0 "" 0 "" {TEXT -1 79 "es m*2^(-1022), y como la manti sa puede hacerse tan peque\361a (con 53 digitos" }}{PARA 0 "" 0 "" {TEXT -1 83 "binarios) como 2^(-52), el underflow se retrasa hasta \+ 2^(-52-1022) = 2^(-1074)." }}{PARA 0 "" 0 "" {TEXT -1 78 "Dicho numer o es justo el minimo exponente encontrado por la rutina exp_min()." } }{PARA 0 "" 0 "" {TEXT -1 1 " " }}{PARA 0 "" 0 "" {TEXT -1 63 "Con est e convenio el maximo y minimo numero representables son:" }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 105 " Rep resentacion maquina Interpretacion \+ Valor" }}{PARA 0 "" 0 "" {TEXT -1 101 "Max: (111 .. . 111, 1023) mant=(1).111 ... 111 exp= 1023 1.7 9 e308 " }}{PARA 0 "" 0 "" {TEXT -1 95 "Min : (000 ... 001 ,-1023) mant=(0).000 ... 001 exp= -1022 4.94 e-32 3" }}}}{PARA 20 "" 0 "" {TEXT -1 0 "" }}{SECT 1 {PARA 5 "" 0 "" {TEXT -1 21 "Aplicacion al Maple." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 83 "Tratamos ahora de intentar hallar dichos expone ntes maximo y minimo con el Maple: " }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }{MPLTEXT 1 0 35 "evalf(exp_min()); evalf(exp_min());" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 70 " Como vemos obtenemos errores t anto con exp_max() como con exp_min(). " }}{PARA 0 "" 0 "" {TEXT -1 83 "La razon de esto es que MAPLE admite como exponente enteros de un \+ rango muchomayor " }}{PARA 0 "" 0 "" {TEXT -1 89 "que la representacio n anterior (-1023:1024). Podemos verlo quitando el comentario (#) \+ " }}{PARA 0 "" 0 "" {TEXT -1 90 "delante del print() en el bucle de la funcion exp_min() para comprobar que esta pasando " }}{PARA 0 "" 0 "" {TEXT -1 26 "y cuando casca el proceso:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "exp_min();" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 73 " Vemos que justo antes del error estamos manejando numeros del \+ orden de " }{XPPEDIT 18 0 "10^(-10^9);" "6#)\"#5,$*$\"#5\"\"*!\"\"" } {TEXT -1 4 " ." }}{PARA 0 "" 0 "" {TEXT -1 80 "Con semejante rango, \+ la gente que dise\361o Maple no se preocupo de implementar un " }} {PARA 0 "" 0 "" {TEXT -1 88 "control para el manejo de underflows u o verflows. Ninguna aplicacion real llegara nunca" }}{PARA 0 "" 0 "" {TEXT -1 90 "a forzar dichos limites, por lo que antes de que el siste ma nos diga que 10^exp = Inf o " }}{PARA 0 "" 0 "" {TEXT -1 87 "que \+ 10^ (-exp) = 0 lo que revienta antes es que estamos intentando dar a \+ exp un valor " }}{PARA 0 "" 0 "" {TEXT -1 30 "fuera de su (amplisimo) \+ rango." }}{PARA 0 "" 0 "" {TEXT -1 1 " " }{MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}}{PARA 3 "" 0 "" {TEXT -1 0 "" }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}}{MARK "12 10 19 6 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 }