EXPOSICION_PUNTO_FLOTANTE[1]

March 25, 2018 | Author: Evanz Lazaro | Category: Bit, Fraction (Mathematics), Mathematical Objects, Arithmetic, Numbers


Comments



Description

ARITMETICA DEL PUNTO FLOTANTE    Mario Alberto Mayra Lucia Elizabeth Carlos Intentaremos convencerte que las siguientes afirmaciones son falsas: • El análisis numérico es el estudio de la aritmética del punto flotante. • La aritmética del punto flotante es impredecible y difícil de entender. La aritmética del punto flotante es no solo computacionalmente poderosa si no matemáticamente elegante. Matlab utiliza la aritmética del punto flotante, la cual involucra un conjunto finito de números con precisión finita. Esta limitación conlleva dos dificultades:  los números representados no pueden ser arbitrariamente grandes (en valor absoluto).  debe haber “agujeros” entre ellos. Esto conduce a los fenómenos de roundoff, underflow, y overflow. Por lo general, es posible utilizar Matlab eficazmente sin preocuparse de estos detalles. Hace 20 años, la situación era más complicada de lo que es ahora. Cada computadora tenía su propio sistema de números en punto flotante (algunos eran binario, otras decimal). Había incluso una computadora rusa que utilizó aritmética ternaria. Además, entre los binarios algunas utilizaron aritmética de base 2, otras octal o hexadecimal . Y cada una tenía una precisión diferente. porque hay cierta flexibilidad en la norma ANSI/IEEE. Todas las computadoras diseñadas a partir de 1985 usan la aritmética IEEE de punto flotante.En 1985 la IEEE Standards Board y la American National Standards Institute decidieron adoptar para la aritmética binaria de punto flotante lo que se conoce como ANSI/IEEE 754-1985. Esto no significa que arrojen los mismos resultados. . Estos pueden expresarse como: x=±(1+f)·2e . Matlab ha usado siempre el formato IEEE de doble precisión. La mayoría de los números punto flotante diferentes de cero son normalizados.Significa que el modelo es independiente de la computadora que se utilice. Hay un formato de precisión simple que ahorra espacio. En esta ocasión trataremos con doble precisión. pero que no es muy rápida en máquinas modernas. La finitud de e es una limitación en rango. Cualquier número que no coincida con uno de los números en punto flotante del sistema IEEE debe ser aproximado por uno de ellos. .La cantidad f se le llama fracción o mantisa y a e exponente. 252f es un número entero en el intervalo 0 ≤ 252f < 252 El exponente e es un entero en el intervalo -1022 ≤ e ≤ 1023 La finitud de f es una limitación de precisión. La fracción satisface 0≤f<1 y debe ser representado en sistema binario usando a lo más 52 bits. Es decir. El signo de e es almacenando en e + 1023.Los números en punto flotante de doble precisión se almacenan en “palabras” de 64 bits. con 52 bits para f. 11 bits para e. Los dos valores extremos. . el 0 y el 211-1 del exponente. que está entre 1 y 211-2. son reservados para los números de punto flotante excepcionales que describiremos más adelante. y 1 bit para el signo del número. sino 1+f. El parámetro t especifica el número de bits usados para almacenar f. Sin embargo. . el formato de IEEE almacena 65 bits de información en una “palabra” de 64 bits. el 1 no necesita ser almacenado. En otras palabras. En efecto.La parte fraccional de un número en punto flotante no es f. que necesita 53 bits. 2 t f es un número entero. El programa floatgui muestra la distribución de los números positivos en punto flotante en un sistema para el que es posible elegir los parámetros. Inicialmente. el espacio entre los números 2 y 3 es 2-2 . Mientras que e aumenta . el espacio aumenta. . Si e = 0 y t = 3.m) Dentro de cada intervalo binario 2e ≤ x ≤ 2e+1 los números están igualmente espaciados con un incremento de 2e-t . el espacio de los números entre 1 y 2 es 2-3 (1/8).Los parámetros emin y emax especifican el rango del exponente así que emin ≤ e ≤ emax . por ejemplo. etc. floatgui se presenta con t = 3. emin = -4 y emax = 3 y produce la siguiente distribución (floatgui. se le conoce con el nombre de épsilon de la máquina y se denota en MATLAB por eps. Una importante cantidad asociada con la aritmética del punto flotante es high-lighted marcada con rojo por floatgui. Con esta escala logarítmica. y emax = 3. A este número. El programa muestra floatgui con logscale con t = 5. emin = -4. .Los números en punto flotante se pueden exhibir con logscale. es más evidente que la distribución en cada intervalo binario es igual. Antes del formato IEEE. Para el sistema punto flotante del modelo floatgui. eps = 2^(-t).eps es la distancia de 1 al siguiente número en punto flotante. para IEEE de precisión doble. Ahora. eps = 2^(-52) . diversas máquinas tenían distintos valores de eps.   La distancia o espacio relativo máximo entre los números punto-flotante es “eps”.“EPS”  El valor decimal aproximado del “eps” es: 2. En cualquier caso. este error es eps /2=2-53. . podemos decir que el nivel del roundoff o de error relativo es cerca de 16 dígitos decimales.2204x10 . El error relativo máximo se comete cuando el resultado de una operación aritmética se redondea al número punto-flotante más cercano.16  eps/2 o el eps (épsilon de la máquina) se puede llamar el nivel del roundoff (Redondeo). Dicha serie es:  .1 El valor matemático t almacenado en “t” no es exactamente 0:1 porque la expresión de la fracción decimal 1/10 en binario requiere de una serie infinita.ROUNDOFF  Un caso frecuente del roundoff ocurre con la declaración simple de Matlab: t = 0. 0. 0. observamos que juntos expresan 1/10 en series de base 16 (HEXADECIMAL):  . la secuencia de los coeficientes 1. Agrupando estos términos de 4 en 4. Después del primer término. 1 se repite infinitamente de manera frecuente. 2) Posteriormente vea el valor que corresponde de acuerdo a la tabla: Binario Hexadecimal • 0000 • 0001 • 0010 • 0011 • 0100 • 0101 • 0110 • 0111 • 1000 • 1001 • 1010 • 1011 • 1100 • 1101 • 1110 • 1111 •0 •1 •2 •3 •4 •5 •6 •7 •8 •9 •A •B •C •D •E •F . Si al terminar de agrupar no completa 4 dígitos. entonces agregue ceros a la izquierda.BINARIO A HEXADECIMAL 1) Agrupe la cantidad binaria en grupos de 4 en 4 iniciando por el lado derecho. son obtenidos por la terminación de la parte fraccionaria de esta serie después de 52 términos binarios (o 13 términos hexadecimales) redondeando el último término al entero más próximo. Así tenemos que: donde:  .  Los números punto-flotante que se encuentran a cualquier lado de 1/10. Es decir:  donde: . Resulta que 1/10 está más próximo a t2 que a t1. así que t es igual al t2. 1 produce: >> t=0. el comando de MATLAB “format hex” aplicado a t=0.1000 >> format hex >> t t= 3fb999999999999a  Es decir. la conversión de números entre las bases 2 y 16 es muy sencilla. En realidad. el “format hex” es un comando que despliega el valor de “t” en forma hexadecimal .1 t= 0. Por ejemplo.   . 3fb. que es el valor del exponente en polarización negativa e+1023 si “e” es -4. Los primeros tres caracteres. Los otros 13 caracteres son la representación hexadecimal de la fracción “f” o mantisa. Los caracteres anteriores tienen distintos significados: 3fb 999999999999a  Las letras de “a” a “f” representan los números 10 a 15 en forma hexadecimal. nos dan la representación hexadecimal del decimal 1019. y los restantes 11 bits representan el exponente. 0. por lo tanto t es positivo. . es el signo.  Las restantes cifras 999999999999a representan la fracción que en binario sería: 1001 1001 1001 · · · 1001 1010 ocupando los 52 bits correspondientes. El primer bit.3fb 999999999999a  Observemos que cada cifra es una “palabra” de cuatro bits en el sistema binario. Así 3fb en binario es: 0011 1111 1011 que son los 12 primeros bits de t. RESUMEN  El valor almacenado en “t” es muy cercano. la cantidad: 0.1 Algunas veces es importante hacer dicha distinción.1 Esta cantidad no es exactamente igual a 3 porque el numerador real es un poco más pequeño que el 0. a 0. pero no exactamente igual.3 y el denominador real es poco más grande al valor almacenado de 0.1   . Por ejemplo.3/0. Matlab es muy cuidadoso en el arreglo del último elemento del vector: 0: 0. diez pasos de longitud “t” (t=0. Visto de otra manera. Pero si formamos este vector a través de repetidas adiciones de 0.1 :1 para que éste sea exactamente 1.1.   .1) no son precisamente lo mismo que un paso de longitud 1. nos extrañará que el final sea exactamente 1. ¿En qué se parece la aproximación del Punto –Flotante al Radio dorado?  El siguiente código nos da la razón áurea en base 16: >>format hex >>phi = (1 +sqrt (5))/2 phi= 3ff9e3779b97f4a8 . 3ff en base 16 es: 3*162 + 15*16 + 15 = 1023 en decimal. 3 es el primer dígito hexadecimal.1 y 0.  .2 tiene e=0. pero ɸ es positivo. sin embargo estas salidas hexadecimales comienzan con 3ff. Los bits restantes de los primeros tres dígitos hexadecimales contienen a e + 1023. por lo que e=0. En realidad.3ff9e3779b97f4a8  Una vez más. es 0011 en binario.   El primer bit es el signo del número puntoflotante(0 es positivo y 1 es negativo). cualquier numero punto-flotante entre 0. 3ff9e3779b97f4a8  Las restantes 13 cifras hexadecimales contienen la fracción “f” que en este ejemplo es: f = 9/16 + 14/162 + · · · + 10/1612 + 8/1613 Con esos valores de “f” y “e” se obtiene:  (1 + f)2e ≈ ɸ . El siguiente fragmento de código muestra otro ejemplo: Format long a = 4/3 b = a – 1 c = 3*b e = 1 – c Con un cálculo exacto. e debería ser 0. la salida producida es: . Pero con el punto flotante. 00000000000000 e = 2.220446049250313e-016 .a = 1.33333333333333 b = 0.33333333333333 c = 1. La multiplicación 3*b puede efectuarse sin redondeo. El cociente no puede ser exactamente 4/3 El valor almacenado en a es cercano pero no exactamente igual a 4/3. .El único redondeo está presente en la división. La substracción b = a – 1 produce una variable b cuyo último bit es 0. El valor almacenado en c no es exactamente igual a 1. en la primera sentencia. por lo que el valor almacenado en e no es 0. El número de punto flotante más grande tiene f un poco menor que 1 y e = 1023.El nivel de redondeo de eps a veces es llamado “floating-point zero”. Matlab llama a éstos números realmin y realmax. caracterizan el sistema estándar. Junto con eps. Hay muchos números de punto flotante mucho más pequeños que eps. (punto flotante cero) pero es un nombre mal aplicado. El número de punto flotante más pequeño positivo tiene f = 0 y e = -1022. . 7977e+308 .2204e-16 2.Binary eps realmin realmax 2^(-52) 2^(-1022) (2-eps)*2^1023 Decimal 2.2251e-308 1. Si cualquier cálculo intenta producir un valor indefinido incluso en los reales. 0/0. Es representado tomando e = 1024 y f = 0 y satisface relaciones como 1/Inf = 0 e Inf+Inf = Inf.Si cualquier cálculo intenta producir un valor más grande que realmax. (Ej. El resultado es un valor de punto flotante excepcional llamado infinito o Inf. . se indica overflow (excede el límite). Inf-Inf). NaN es representado tomando e = 1024 y f distinto de cero. el resultado es un valor excepcional conocido como Not-a-Number (no es un número). o NaN. cualquier resultado más pequeño que realmin se toma como 0. . El número subnormal positivo más pequeño es alrededor de 0. se indica underflow (por debajo del límite).494e-323. En máquinas sin valores subnormales. Muchas pero no todas las máquinas permiten números de punto flotante excepcionales en el intervalo entre realmin y eps*realmin.Si cualquier cálculo intenta producir un valor más pequeño que realmin. Cualquier resultado más pequeño que éste se toma como 0. La división y raíz cuadrada que involucren flints también producen un flint si el resultado es un entero. La suma.Matlab usa el sistema de punto flotante para manipular enteros. sqrt(363/3) produce 11. resta y multiplicación de flints produce el resultado flint exacto si no es mayor a 253. En ocasiones usaremos el término flint para describir un número punto flotante cuyo valor es un entero. . mientras el resultado no sea muy grande. Las operaciones de punto flotante en flints no introduce errores de redondeo. Por ejemplo. sin redondeo. X=POW2(F. help log2 help pow2 produce [F.5<=abs(F)<1. El resultado es calculado rápidamente simplemente añade E al exponente punto flotante de F.Dos funciones de MATLAB que desarma (ó descompone) y une números de punto flotante son log2 y pow2. .^E).E) para un arreglo real F y un arreglo de enteros E calcula X=F . y un arreglo E de enteros. Cualquier cero en X produce F=0 y E=0. usualmente en el rango 0.^E.* (2. regresa un arreglo F de números reales.*2. así que X=F .E] = LOG2(X) para un arreglo real X. f = 2*F-1 y e = E-1.E] = log2(phi) produce F= 0.Las cantidades F y E denotados por log2 y pow2 preceden del IEEE estándar de punto flotante y así notamos que son escasamente diferentes de los f y e que nosotros solemos usar en este tema.80901699437495 E= 1 . [F. De hecho. consideremos el conjunto 2 por 2 de ecuaciones lineales .E) devuelve phi = 1.Entonces phi = pow2(F.61803398874989 Veamos un ejemplo de cómo un redondeo erróneo afecta el cálculo matricial. 1.7 x1  0.2.7 0. La solución obvia es x1  1.5 x2  2. x2  1.17 x1 5 x2  22 . 1.5] b = [22.2] x = A\b producen . Pero las declaraciones de MATLAB A = [17 5. 2. .1) no es precisamente 17/10. Pero la representación punto flotante de la matriz A no es exactamente singular porque A(2. La segunda ecuación solo es 0.0000 ¿De dónde se obtuvo esto? Bien.0588 8. las ecuaciones son singulares.x= -1.1 veces la primera. El calculo para x tiene una infinidad de soluciones posibles. pero consistentes. el cual resulta ser el número punto flotante obtenido por truncar.El proceso de solución resta un múltiplo de la primera ecuación de la segunda. La matriz A y el lado derecho b son modificados ahora por A(2.2) y b(2) serían cero.:) b(2) = b(2) – mu*b(1) Con el calculo preciso . El multiplicador es mu=1.7/17. ambos no llegan a ser múltiplos ceros de eps. la expansión binaria de 1/10. pero con la aritmética de punto flotante. en vez de redondear.:) – mu*A(1. ambos A(2. .:) = A(2. 2) y muestra un mensaje de advertencia de que la matriz se acerca a singular. Entonces.4408e-16 MATLAB anuncia el nuevo pequeño valor de A(2. este calcula la solución de la segunda ecuación modificada por dividir un redondeo erróneo por otro.5511e-17 b(2) = 2*eps = 4.A(2.2) =8 .2) = (1/4)*eps = 5. x(2) = b(2)/A(2. 0588 Los detalles de un redondeo erróneo conduce a MATLAB a escoger una solución particular de entre muchas infinidades de soluciones posibles para el sistema singular. .Este valor es sustituido en la primera ecuación anteriormente vista para dar x(1) = (22 – 5*x(2))/17 = -1. ^7-7*x. Estamos tratando con un redondeo erróneo. x = 0.Los valores pequeños de y se han calculado para tomar sumas y restas . y = x. Ésta no es suave.012.10 14.^6+21*x.0001:1.988:. El factor escala del eje y es pequeño.^3-21*x.^2+7*x-1.^5-35*x.^4+35*x. El resultado en la gráfica no parece ser un polinomio.Nuestro ejemplo final grafica un polinomio de séptimo grado. El ejemplo fue conseguido usando la caja de herramientas simbólicas para expandir ( x  1) 7 y escogiendo cuidadosamente el rango para el eje x tan cercanos a x = 1. ^7. Si los valores de y son calculados a la vez por y  ( x  1).de números tan grandes como 35 1. entonces resulta una gráfica suave (pero muy plana). No es grave la cancelación sustraída. .0124. mathworks.C. Floating-Point Arithmetic. MOLER. Numerical Computing with MATLAB. pp 34-42. http://www.com/moler/ .
Copyright © 2024 DOKUMEN.SITE Inc.