Representación en Punto Flotante

Anuncio
Representación en Punto Flotante
Minaya Villasana
Abril-Julio, 2004
1
Representación en base 2
Las computadoras tienen dos formas de representar números: enteros (solo usado para enteros) y punto
flotante (números reales). Nosotros estamos interesados en aritmética de punto flotante. Punto flotante está
muy relacionado con la notación cientı́fica. Un número real cualquiera x ∈ R, se puede descomponer como
una suma (infinita) en base 10. Por ejemplo:
49.8125 = 4 · 101 + 9 · 100 + 8 · 10−1 + 1 · 10−2 + 2 · 10−3 + 5 · 10−4 + 0 · 10−5 + · · ·
Cuando hablamos de la representación en base diez, tenemos a disposición un alfabeto de 10 para representar
los números: {0, 1, 2, 3, 4, 5, 6, 7, 8 y 9}. Las computadoras por lo general no representas los números en base
decimal sino en binario (base 2), donde el alfabeto es {0 y 1}. En el pasado existieron computadoras que
tenı́an una representación octal (base 8) o hexagesimal (base 16).
Una representación tı́pica en base 2 es (11011.01)2 el cual en base decimal corresponde al número 27.25.
(11011.01)2
1 · 24 + 1 · 23 + 0 · 22 + 1 · 21 + 1 · 20 + 0 · 2−1 + 0 · 2−2
1
= 16 + 8 + 2 + 1 +
4
= 27.25
=
Notar que el principio es el mismo que en base 10; cada dı́gito en la representación acompaña a una potencia
de la base. Los dı́gitos a izquierda del punto binario acompañan a potencias positivas de 2 y los que están a
la derecha del punto acompañan a potencias negativas de 2.
Ejemplo 1.1. Pasar x = 49 a binario.
1
En este caso x es un número entero y por lo tanto tiene una representación binaria de la forma
x =
(an an−1 an−2 · · · a1 a0 )2
=
an · 2n + an−1 · 2n−1 + an−2 · 2n−2 + · · · + a1 · 21 + a0 · 20
=
2(an · 2n−1 + an−1 · 2n−2 + an−2 · 2n−3 + · · · + a1 ) + a0
luego x = 2 · x1 + r, con x1 = an · 2n−1 + an−1 · 2n−2 + an−2 · 2n−3 + · · · + a1 y r = a0 , de aqui que a0 es el
resto de dividir x entre 2. Para hallar el siguiente dı́gito, a1 , realizamos lo mismo, pero ahora aplicado a x1 .
x1 = 2(an · 2n−2 + an−1 · 2n−3 + an−2 · 2n−4 + · · · + a2 ) + a1 .
En nuestro caso particular,
x =
49
=
2 · 24 + 1 ⇒ a0 = 1
x1
=
24
=
2 · 12 + 0 ⇒ a1 = 0
x2
=
12
=
2 · 6 + 0 ⇒ a2 = 0
x3
=
6
=
2 · 3 + 0 ⇒ a3 = 0
x4
=
3
=
2 · 1 + 1 ⇒ a4 = 1
x5
=
1
=
2 · 0 + 1 ⇒ a5 = 1
x6
=
0
=
0
Por lo tanto 49 = (110001)2 .
Ejemplo 1.2. Pasar x = 0.8125 a binario.
A diferencia del ejemplo anterior x es un número decimal y por lo tanto tiene una representación binaria de
la forma
x =
=
=
(.a−1 a−2 a−3 · · · )2
a−1 · 2−1 + a−2 · 2−2 + a−3 · 2−3 + · · ·
1
(a−1 · +a−2 · 2−1 + a−3 · 2−2 + · · · )
2
luego 2x = a−1 · +a−2 · 2−1 + a−3 · 2−2 + · · · , de aqui que a−1 es el la parte entera de 2x. Para hallar el
siguiente dı́gito, a−2 , realizamos lo mismo, pero ahora aplicado a x1 .
x1 = a−2 · 2−1 + a−3 · 2−2 + · · ·
2
En nuestro caso particular,
x
= 0.8125
⇒ 2x
= 1.625 ⇒ a−1 = 1
x1
= 0.625
⇒ 2x1
= 1.25
⇒ a−2 = 1
x2
= 0.25
⇒ 2x2
= 0.5
⇒ a−3 = 0
x3
= 0.5
⇒ 2x3
= 1
⇒ a−4 = 1
Por lo tanto 0.815 = (.1101)2 .
Ejemplo 1.3. Pasar x = 49.8125 a binario.
De los ejemplos 1.2 y 1.1, podemos decir que 49.8125 = (110001.1101)2
1.1
Conversión de sistema Octal
También podemos hacer conversiones de base decimal a base ocho y base dos (10 ↔ 8 ↔ 2). Veamos el
ejemplo de conversión de base octal a base binaria y viceversa.
Para hacer esta conversión notamos que grupos de tres dı́gitos binarios pueden ser traducidos directamente
a base ocho según la siguiente tabla:
Binario
Octal
000
001
010
011
100
101
110
111
0
1
2
3
4
5
6
7
ası́ que el número (101 101 001 .110 010 100)2 = (551.624)8 .
La justificación se basa en el cálculo siguiente:
x =
(0.b1 b2 b3 . . . b6 . . .)2
=
b1 2−1 + b2 2−2 + b3 2−3 + b4 2−4 + b5 2−5 + b6 2−6 + · · ·
=
(4b1 + 2b2 + b3 )8−1 + (4b4 + 2b5 + b6 )8−2 + · · ·
Los números en () en la última ecuación solamente producen los dı́gitos 0,1, ..., 7 puesto que cada bi
solamente puede tomar valores 0 o 1. por lo tanto esta debe ser la representación en el sistema octal.
En el otro sentido hacemos la traducción según la tabla anterior, de modo que (5362.74)8 = (101011110010.111100)2 .
3
2
Representación en la computadora
Sea β la base usada en el computador para la representación (β puede ser 2, 8 o 16). Para x ∈ R, x 6= 0,
x = σ · (.a1 a2 · · · at )β · β E
donde σ representa el signo (σ = 1 es un número negativo y σ = 0 es un número positivo). La mantisa
(.a1 a2 · · · at )β y el exponente E. En el ejemplo 1.3, vimos que 49.8125 = (110001.1101)2 . Para representar
el número primero lo normalizamos. La normalización de (110001.1101)2 resulta en (1.100011101)2 · 25 .
Notar que el dı́gito 1 (a izquierda) siempre estará presente en la normalización (porqué?). Por lo tanto este
dı́gito muchas veces se omite en las representaciones para permitir aumentar la cantidad de información
almacenada. Siguiendo el estandar de la IEEE (32 bits), un número puede ser representado de la siguiente
manera: un bit para el signo, ocho bits para el exponente y 23 bits para la mantisa. Si la mantisa tiene
menos de 23 dı́gitos entonces rellenamos los bits restantes con 0. El exponente se guarda sumándole el sesgo
correspondiente al número de bits de la representación (para 32 bits el sesgo es 127). la razón es que el
exponente es un número con signo entre -126 y 127, el sesgo se suma al exponente real para almacenar
un número positivo que represente al exponente. En nuestro ejemplo el nuevo exponente a almacenar es
5 + 127 = 132 = (10000100)2 .
[0][010000100][1000111010000000 . . . 0]
Nota: una máquina de 64 bits (precisión doble) utiliza 1 bit para el signo, 11 bits para el exponente y 52
para la mantisa.
Al representar un número real (posiblemente con una representación binaria infinita) en la computadora
lo hacemos con número finito de bits. Mas aún, en la computadora representamos un número infinito de
número reales con un número finito de bits.
Sea f l(x) la representación en punto flotante de x ∈ R. Supongamos que x ∈ R y x ∈ [f l(x1 ), f l(x2 )].
Existen dos formas de representar a x.
1. Truncando: Ignora todos los bits mas allá del t-ésimo dı́gito, si t es el número de bits disponibles para
la mantisa.
2. Redondeando: Seleccionar el punto flotante más cercano.

 f l(x ) : x − f l(x ) ≤ f l(x ) − x
1
1
2
f l(x) =
 f l(x ) : x − f l(x ) > f l(x ) − x
2
1
2
4
Mientras x sea más grande, fl(x1 )−f l(x2 )incrementa, dondex1 y x2 , por lo tanto el error de truncamiento
aumenta.
3
Errores
Existen dos formas de medir el error:
Definición 3.1. Error Absoluto = |x − f l(x)|.
Definición 3.2. Error Relativo = f rac|x − f l(x)||x|.
La diferencia entre los dos errores es que el error absoluto nos ofrece información sobre la concordancia
de puestos decimales mientras que el relativo nos dice cual es el acuerdo de los valores en cifras significativas.
Consideremos la siguiente tabla de valores
4
Ejercicios
1. cual es el mayor exponente que se puede representar en un computador binario de 32 bits?
2. cual es el menor exponente que se puede representar en un computador binario de 32 bits?
3. cual es el sesgo para un máquina de 64 bits?
5
Descargar