Tarea Del Actuario 110 y 111

10
Representación de los números en punto flotante En un ordenador típico los números en punto flotante se representan de la manera descrita en el apartado anterior, pero con ciertas restricciones sobre el número de dígitos de q y m impuestas por la longitud de palabra disponible (es decir, el número de bits que se van a emplear para almacenar un número). Para ilustrar este punto, consideraremos un ordenador hipotético que denominaremos MARC-32 y que dispone de una longitud de palabra de 32 bits (muy similar a la de muchos ordenadores actuales). Para representar un número en punto flotante en el MARC-32, los bits se acomodan del siguiente modo: Signo del número real x: 1 bit Signo del exponente m: 1 bit Exponente (entero |m|): 7 bits Mantisa (número real |q|): 23 bits En la mayoría de los cálculos en punto flotante las mantisas se normalizan, es decir, se toman de forma que el bit más significativo (el primer bit) sea siempre '1'. Por lo tanto, la mantisa q cumple siempre la ecuación (19 ). Dado que la mantisa siempre se representa normalizada, el primer bit en q es siempre 1, por lo que no es necesario almacenarlo proporcionando un bit significativo adicional. Esta forma de almacenar un número en punto flotante se conoce con el nombre de técnica del 'bit fantasma'. Se dice que un número real expresado como aparece en la ecuación (18 ) y que satisface la ecuación (19 ) tiene la forma de punto flotante normalizado. Si además puede representarse exactamente con |m| ocupando 7 bits y |q| ocupando 24 bits, entonces es un número de máquina en el MARC-32 3 La restricción de que |m| no requiera más de 7 bits significa que:

Transcript of Tarea Del Actuario 110 y 111

Page 1: Tarea Del Actuario 110 y 111

Representación de los números en punto flotanteEn un ordenador típico los números en punto flotante se representan de la manera descrita en el apartado anterior, pero con ciertas restricciones sobre el número de dígitos de q y m impuestas por la longitud de palabra disponible (es decir, el número de bits que se van a emplear para almacenar un número). Para ilustrar este punto, consideraremos un ordenador hipotético que denominaremos MARC-32 y que dispone de una longitud de palabra de 32 bits (muy similar a la de muchos ordenadores actuales). Para representar un número en punto flotante en el MARC-32, los bits se acomodan del siguiente modo: 

Signo del número real x: 1 bit

Signo del exponente m: 1 bit

Exponente (entero |m|): 7 bits

Mantisa (número real |q|): 23 bits

 En la mayoría de los cálculos en punto flotante las mantisas se normalizan, es decir, se toman de forma que el bit más significativo (el primer bit) sea siempre '1'. Por lo tanto, la mantisa q cumple siempre la ecuación (19).

Dado que la mantisa siempre se representa normalizada, el primer bit en q es siempre 1, por lo que no es necesario almacenarlo proporcionando un bit significativo adicional. Esta forma de almacenar un número en punto flotante se conoce con el nombre de técnica del 'bit fantasma'.

Se dice que un número real expresado como aparece en la ecuación (18) y que satisface la ecuación (19) tiene la forma de punto flotante normalizado. Si además puede representarse exactamente con |m| ocupando 7 bits y |q| ocupando 24 bits, entonces es un número de máquina en el MARC-323

La restricción de que |m| no requiera más de 7 bits significa que:

 

Ya que  , la MARC-32 puede manejar números tan pequeños como 10-38 y tan grandes como 1038. Este no es un intervalo de valores suficientemente generoso, por lo que en muchos casos debemos recurrir a programas escritos en aritmética de doble precisión e incluso de precisión extendida.

Como q debe representarse empleando no más de 24 bits significa que nuestros números de máquina tienen una precisión limitada cercana a las siete cifras decimales, ya que el

bit menos significativo de la mantisa representa unidades de  . Por tanto, los números expresados mediante más de siete dígitos decimales serán objeto de aproximación cuando se almacenen en el ordenador.

Por ejemplo: 0.5 representado en punto flotante en el MARC-32 (longitud de palabra de 32 bits) se almacena en la memoria del siguiente modo:

Page 2: Tarea Del Actuario 110 y 111

 

Ejemplo 5: Suponga un ordenador cuya notación de punto fijo consiste en palabras de longitud 32 bits repartidas del siguiente modo: 1 bit para el signo, 15 bits para la parte

entera y 16 bits para la parte fraccionaria. Represente los números 26.32,  y 12542.29301 en base 2 empleando esta notación de punto fijo y notación de punto flotante MARC-32 con 32 bits. Calcule el error de almacenamiento cometido en cada caso.

Solución: El número 26.32 en binario se escribe del siguiente modo:

Empleando las representaciones comentadas, obtenemos:

Si expresamos el error como la diferencia entre el valor y el número realmente almacenado en el ordenador, obtenemos:

En cuanto a los otros dos números, obtenemos:

 

Antes de entrar con detalle en la aritmética de los números en punto flotante, es interesante notar una propiedad de estos números de especial importancia en los cálculos numéricos y que hace referencia a su densidad en la línea real. Supongamos

que p, el número de bits de la mantisa, sea 24. En el intervalo  (exponente f = 0) es posible representar 224 números igualmente espaciados y separados por una distancia

1/224. De modo análogo, en cualquier intervalo  hay 224 números equiespaciados, pero su densidad en este caso es 2f/224. Por ejemplo, entre 220 = 1048576 y 221 = 2097152 hay 224 = 16777216 números, pero el espaciado entre dos números

Page 3: Tarea Del Actuario 110 y 111

sucesivos es de sólo  . De este hecho se deriva inmediatamente una regla práctica: cuando es necesario comparar dos números en punto flotante relativamente grandes, es siempre preferible comparar la diferencia relativa a la magnitud de los números. En la figura (1) se representa gráficamente la separación entre dos números consecutivos en función del exponente f en el rango f = [20,30].    

   Figure: Evolución de la separación entre dos

números consecutivos en función del exponente, f, de la representación en punto flotante de un número

real.

[bb=55 60 455 410, clip=true, scale=0.7]eps/expon

Los reales

Una variable real (double) está formada por 8 bytes, es decir el doble de un entero. En ella se almacenan números reales en formato binario. Por ejemplo, el número:

1101.1010

representa en decimal al número:

2^3 + 2^2 + 2^0 + 2^(-1) + 2^(-3) = 8+4+1+0.5+0.125

Los primeros computadores almacenaban los números reales en una formato llamado punto fijo, en donde se destinaba una cantidad fija de bits para la parte entera (por

Page 4: Tarea Del Actuario 110 y 111

ejemplo 32 bits) y el resto a la parte fraccionaria. Por lo tanto, el número anterior sería representado en 64 bits como:

00000000 00000000 00000000 00001101 . 10100000 00000000 00000000 00000000

En esta representación, el punto que separa la parte entera de la parte fraccionaria, siempre se ubica en una posición fija y de ahí el nombre de esta representación.

El problema de esta representación es que el rango de valores representables es el mismo de los números enteros. Se necesitaba un mecanismo que aumentara el rango de números representables. La forma de hacerlo fue destinar una parte de los bits a indicar la posición del punto. Y este formato paso a llamarse punto flotante.

Representación en punto flotante

Un número real se almacena en una variable especificando 3 componentes: el signo (+ o -), la mantisa y el exponente. Por ejemplo, el número 11 se representa como:

el signo: + mantisa: 10110000... exponente: 4

La mantisa es una secuencia de bits que siempre comienza en 1. El exponente indica en donde colocar el punto que separa la parte entera de la fraccionaria. Un valor 0 indica que el punto se coloca justo antes del primer bit. Un valor 4 indica que se coloca después del cuarto bit. Un valor -3 indica que hay que imaginar que el número va precedido por 0.000 y luego viene la mantisa.

¿Qué número es el siguiente?

el signo: - mantisa: 110010000... exponente: 7

Solución: -1100100.00... , que es -(4+32+64)= -100

Otros ejemplos:

signo mantisa exponente en binario en decimal

+ 1000... 100 1 seguido 2^99

de 99 ceros

+ 1010... 0 0.1010 0.5+0.125 (0.625)

+ 1000... -3 0.0001 2^(-4) (0.0625)

En una variable de tipo double se destina 1 bit para el signo, 11 bits para el exponente y 52 bits para la mantisa.

Valores máximos y mínimos

Page 5: Tarea Del Actuario 110 y 111

Máximo en valor absoluto: 2^1023Valor más pequeño: 2^(-1024)

La ventaja de esta representación es que se alcanza un rango de representación mucho más grande de lo que sería posible con 64 bits.

Precisión y error de representación

La desventaja es que los números se almacenan con una precisión limitada. Esto significa que un número que requiera 100 bits de mantisa será aproximado a uno que solo ocupa 52, introduciéndose entonces un error de representación.

El error que se comente se puede visualizar mejor en base 10. El error que comete es como cuando el siguiente número:

1234567890123456789012345678901234567890

se aproxima al siguiente valor:

123456789012345*10^25

Es decir, solo se reprentan 15 dígitos de los 40 iniciales. El error absoluto que se comete es:

6789012345678901234567890

que parece enorme, pero lo que importa es el error relativo que es ~10^(-15) que es bajísimo y para la mayoría de las aplicaciones numéricas es insignificante. Pero es un error que conviene tener presente.

Observación: además del tipo double existe el tipo float

tipo tamaño mantisa exponente rango precisión

en bits en bits en bits representado en dígitos

double 64 52 11 ~ [-10^300,10^300] ~ 15

float 32 24 7 ~ [-10^33,10^33] ~ 7

Conceptos esenciales de este capítulo que Ud. debe comprender: El rango de representación de los enteros es limitado. Si el resultado de

una operación aritmética (como la multiplicación) excede el rango de representación se producirá un error en la magnitud del valor almacenado. Lamentablemente, Java no alerta cuando se comete este tipo de errores.

El rango de representación de los reales es casi ilimitado, pero los números se almacenan con una precisión limitada (15 dígitos para una variable de tipo double). Esto hace que al realizar multiplicaciones y divisiones, los valores que se obtienen poseen un error de precisión, que no es relevante para la mayoría de las aplicaciones numéricas.

Page 6: Tarea Del Actuario 110 y 111

Tarea opcional:

Muestre que el número 0.3 no es representable en forma exacta en una variable de tipo double.

Indicación:

Para obtener la representación de un número en el rango [0,1[ como 0.6875 proceda de la siguiente forma:

0.6875 multiplicado por 2 da: 1.375. La parte entera es el primer bit del número en base 2. El número será

entonces 0.1... Quédese sólo con la parte fraccional de 1.375. 0.375 multiplicado por 2 da: 0.75. La parte entera es el segundo bit, por lo que queda como 0.10... 0.375 multiplicado por 2 da: 1.5. La parte entera es el tercer bit, por lo que queda como 0.101... Quédese

sólo con la parte fraccional de 1.5. 0.5 multiplicado por 2 da: 1. La parte entera es el cuarto bit, por lo que queda como 0.1011...

Quédese sólo con la parte fraccional de 1.0. El número que queda es 0, por lo que 0.6875 en base 2 es 0.1011.

Aplique este mismo método para 0.3 y deduzca la forma final del número en base 2.

Error en Aritmetica del punto florantePor simplicidad, en lo que sigue, supongamos n´umeros m´aquina decimales:§0:d1d2:::dk ¢ 10n con 1 · d1 · 9; 0 · di · 9; i = 2; :::; kSe puede normalizar cualquier n´umero real positivo y para convertirlo eny = 0:d1d2:::dkdk+1dk+2::: ¢ 10n

Si y est´a en el rango de la m´aquina puede ponerse en forma de punto flotante, fl(y),tomando k d´ıgitos decimales. Hay dos maneras de elegir esos k d´ıgitos decimales: cortey redondeo.² En el corte simplemente se eliminan todos los d´ıgitos a partir del dk+1.² En el redondeo se agrega 5 ¢ 10n¡(k+1) a y y luego se realiza el corte. O sea,si dk+1 ¸ 5 agregamos 1 a dk y cortamos,si dk+1 < 5 simplemente cortamos.Ejemplo 4.1. El n´umero ¼ es un n´umero irracional, luego tiene una expresi´on decimal

Page 7: Tarea Del Actuario 110 y 111

infinita de la forma ¼ = 3:14159265 : : : . En forma decimal normalizada es¼ = 0:314159265 ¢ ¢ ¢ ¢ 101

El n´umero ¼ en punto flotante con cinco d´ıgitos y corte se representa porfl(¼) = 0:31415 ¢ 101 = 3:1415Con redondeo ser´afl(¼) = (0:31415 + 0:00001) ¢ 101 = 3:1416El error cometido al reemplazar un n´umero por su forma en punto flotante recibeel nombre de error de redondeo independientemente de si se ha aplicado el m´etodo decorte o de redondeo.4.1 ErroresProposici´on 4.2. El error absoluto en la representaci´on de un n´umero p 6= 0 en puntoflotante con t decimales, viene dado por:jp ¡ fl(p)j · 5 ¢ jpj ¢ 10¡t ¢ kcon k = 2 si es por corte y k = 1 si es por redondeo.5Demostraci´on. i) Caso de corte:jp ¡ fl(p)j == j § 10q ¢ (0:d1d2 : : : dtdt+1 : : : ) ¡ (§10q ¢ (0:d1d2 : : : dt))j == 10q¡t ¢ (0:dt+1dt+2 : : : ) = 10q¡t¢(0:dt+1dt+2::: )

10q¢(0:d1d2::: ) jpj == 10¡t ¢ 0:dt+1dt+2:::

0:d1d2::: ¢ jpj ·· 10¡t ¢ 10:1 ¢ jpj = 10¡t ¢ jpj ¢ 5 ¢ k(con k = 2)ii) Caso de redondeo:jp ¡ fl(p)j · 10q ¢ 10¡t ¢ 12 == 10q¡t ¢ 12 ¢ jpjjpj

= 10q ¢ 10¡t ¢ 12 ¢ jpj

10q¢(0:d1d2::: ) == 12 ¢ 10¡t ¢ jpj

(0:d1d2::: ) · 12 ¢ 10¡t ¢ jpj

0:1 =0:5 ¢ 10 ¢ 10¡t ¢ jpj = 5 ¢ 10¡t ¢ jpj ¢ k(con k = 1)Corolario 4.3. El error relativo en la representaci´on de un n´umero p 6= 0 en puntootante con t decimales viene dado por:jp ¡ fl(p)j

Page 8: Tarea Del Actuario 110 y 111

jpj · 5 ¢ 10¡t ¢ k(con k = 2 si es por corte y k = 1 si es por redondeo). Luego, si es por redondeo, fl(p)aproxima a p con t d´ıgitos significativos.4.2 Operaciones en punto flotanteRepresentamos las operaciones en la computadora mediante: © , ª, , ®. Supondremosuna aritm´etica de d´ıgitos finitos (equivale a realizar operaciones exactas sobre representacionesde punto otante, y luego convertir el resultado exacto en su representaci´onde punto flotante), viene definida por:x © y = fl(fl(x) + fl(y))x ª y = fl(fl(x) ¡ fl(y))x y = fl(fl(x) £ fl(y))x ® y = fl(fl(x)=fl(y))6Ejemplo 4.4. Sean x = 1=3 e y = 5=7. En corte a cinco d´ıgitos tenemosfl(x) = 0:33333 ¢ 100; fl(y) = 0:71428 ¢ 100

Oper: Resultado Error abs: Error rel:x © y 0:10476 ¢ 101 0:190 ¢ 10¡5 0:182 ¢ 10¡4

x ª y ¡0:38095 ¢ 100 0:238 ¢ 10¡5 0:625 ¢ 10¡5

x y 0:23809 ¢ 100 0:524 ¢ 10¡5 0:220 ¢ 10¡4

x ® y 0:46666 ¢ 100 0:667 ¢ 10¡5 0:143 ¢ 10¡4