Organización de Computadoras 2003
Apunte 2: Sistemas de Numeración: Punto Flotante
Este apunte fue escrito por el Lic. Pablo Agnus Dei. Para realizar alguna consulta con respecto al mismo lo podés hacer a la cuenta de e-mail pagnus@yahoo.com o en cualquier horario de práctica.
Este apunte fue escrito en Word, por lo cual se recomienda para imprimirlo bajarse la versión disponible en ese formato.
La coma o punto flotante surge de la necesidad de representar números reales y enteros con un rango de representación mayor que el que nos ofrece punto fijo. En la representación en coma flotante, se dividen los n bits disponibles para representar un dato, en 2 partes llamadas mantisa M y exponente E. Considerando que la mantisa tiene una longitud de p bits y que el exponente la tiene de q bits, se cumple que n = p + q.
La mantisa contiene los dígitos significativos del dato, en tanto que el exponente indica el factor de escala, en forma de una potencia de base r. Por todo ello, el valor del número viene dado por :
V(X) = M * rE
El número X viene representado por la cadena:
X = (eq-1, ... , e1, e0, mp-1, ... , m1, m0)
Cuya representación gráfica es:
Exponente (q bits) |
Mantisa (p bits) |
La mantisa M y el exponente E se representan en alguno de los sistemas de punto fijo.
El rango de representación estará dado por :
Mínimo número negativo: - (mantisa máxima) * base máximo exponente positivo
máximo número negativo: - (mantisa mínima) * base máximo exponente negativo
Mínimo número positivo: (mantisa mínima) * base máximo exponente negativo
máximo número positivo: (mantisa máxima) * base máximo exponente positivo
Ejemplo:
Supongamos que tenemos un sistema de numeración con las siguientes características:
Mantisa de 5 bits, expresada en BSS
Exponente de 3 bits, expresada en BCS
Base 2.
Entonces, la cadena
10110 101
representara a 22 * 2 –1 = 11
Mantisa fraccionaria
En este caso, la mantisa en lugar de interpretarse como un número entero, se toma como un número real con el punto decimal implícito a la izquierda de sus bits.
Siguiendo con el ejemplo anterior de mantisa de 5 bits en BSS, exponente de 3 bits en BCS y base 2.
Entonces, la cadena
10110 101
representara a 0.6875 * 2 –1 = 0,34375
y la cadena
00101 011
representara a (5 / 32) * 2 3 = (5/4) = 1.25
este valor coincide con el de la cadena
01010 010 = (5/16) * 2 2 = 1.25
y con el de la cadena
10100 001 = (5/8) * 2 1 = 1.25
Para evitar tener múltiples representaciones de un mismo número, se puede representar la mantisa en forma normalizada. La normalización consiste en hacer que, si la mantisa tiene p bits, el digito p-1 tenga el valor 1. De esta manera, un número no puede tener mas de una representación.
La desventaja de este sistema de representación, es que no se puede representar el numero 0.
Dado que las mantisas normalizadas siempre empiezan con un 1, podemos no almacenar este digito, con lo cual, la mantisa tiene un bit de mas para almacenar. Por tanto
p + q = n + 1
Este bit implícito se agrega en el momento de operar.
Dado que no siempre podemos representar exactamente el número que queremos, definimos error absoluto y error relativo de un número en un sistema de la siguiente forma:
EA(x) = | x' – x |
ER(x) = EA(x) / x
donde x' es el número representable del sistema más próximo a x.
Ejercicios
Queremos obtener:
a) La representación del número 0,40625:
0,40625 = 13 / 32 = 13 * 2-5 = 00001101 1011
b) El número máximo:
mayor mantisa por mayor exponente: 11111111 0111 = 255 * 27 = 32640
c) El número mínimo:
menor mantisa por menor exponente: 00000000 1000 = 0 * 2–8 = 0
d ) Resolución máxima:
mayor número representable: 11111111 0111 = 32640
anterior número representable: 11111110 0111 = 32512
diferencia: = 128
e ) Resolución mínima:
menor número representable: 00000000 1000 = 0
siguiente número representable: 00000001 1000 = 1 / 256
diferencia: = 1 / 256
Queremos obtener:
a) La representación del número 4,75:
4,75 = 0,59375 * 8 = (19 / 32) * 23 = 010011 111
b) El número máximo positivo:
mayor mantisa positiva por mayor exponente positivo: 011111 111 = 31/32 * 23 = 7,75
c) El número mínimo positivo:
menor mantisa positiva por mayor exponente negativo: 000000 000 = 0 * 2–4 = 0
d) El número máximo negativo:
mayor mantisa negativa por mayor exponente positivo: 111111 111 = -(31/32) * 23 = -7,75
e) El número mínimo negativo:
menor mantisa negativa por menor exponente negativo: 100000 000 = 0 * 2–4 = 0
f ) Resolución máxima positiva:
mayor número representable positivo: 011111 111 = 31/32 * 23 = 7,75
anterior número representable: 011110 111 = 30/32 * 23 = 7,50
diferencia : = 0,25
g ) Resolución mínima positiva:
menor número representable positivo: 000000 000 = 0 * 2-4
siguiente número representable: 000001 000 = 1/32 * 2-4
diferencia: = 1 / 32 * 2-4
h ) Resolución máxima negativa:
mayor número representable negativo: 111111 111 = 31/32 * 23 = -7,75
anterior número representable: 111110 111 = 30/32 * 23 = -7,50
diferencia: = 0,25
i ) Resolución mínima negativa:
menor número representable negativo: 100000 000 = 0 * 2-4
siguiente número representable: 100001 000 = -(1/32) * 2-4
diferencia: = -(1/32) * 2-4
Queremos obtener:
a) La representación del número -0,140625:
-0,140625 = -(18 / 32) * 2-2 = 110010 010
b) El número máximo positivo:
mayor mantisa positiva por mayor exponente positivo: 011111 111 = (31/32) * 23 = 7,75
c) El número mínimo positivo:
menor mantisa positiva por mayor exponente negativo: 010000 000 = 1/2 * 2–4 = 1/32
d) El número máximo negativo:
mayor mantisa negativa por mayor exponente positivo: 111111 111 = -(31/32) * 2 3 = -7,75
e) El número mínimo negativo:
menor mantisa negativa por menor exponente negativo: 110000 000 = -1/2 * 2–4 = -1/32
f ) Resolución máxima positiva:
mayor número representable: 011111 111 = 7,75
anterior número representable: 011110 111 = 7,5
diferencia: = 0,25
g ) Resolución mínima positiva:
menor número representable positivo: 010000 000 = 1/2 * 2-4
siguiente número representable: 010001 000 = (17/32) * 2 -4
diferencia: = (1/32) * 2 -4
h ) Resolución máxima negativa:
mayor número representable negativo: 111111 111 = -7,75
anterior número representable: 111110 111 = -7,5
diferencia: 0,25
i ) Resolución mínima negativa:
menor número representable negativo: 110000 000 = -1/2 * 2 –4
siguiente número representable: 110001 000 = -(17/32) * 2 –4
diferencia: = -(1 / 32) * 2 –4
Queremos obtener:
a) La representación del número 1,96875:
1,96875 = (63 / 64) * 2 = 011111 110
b) El número máximo positivo:
mayor mantisa positiva por mayor exponente positivo: 011111 111 = (63/64) * 23 = 7,875
c) El número mínimo positivo:
menor mantisa positiva por mayor exponente negativo: 000000 000 = 1/2 * 2–4 = 1/32
d) El número máximo negativo:
mayor mantisa negativa por mayor exponente positivo: 111111 111 = -(63/64) * 2 3 = -7,875
e) El número mínimo negativo:
menor mantisa negativa por menor exponente negativo: 100000 000 = -1/2 * 2–4 = -1/32
f ) Resolución máxima positiva:
mayor número representable positivo: 011111 111 = 7,875
anterior número representable: 011110 111 = 7,75
diferencia: = 0,125
g ) Resolución mínima positiva:
menor número representable positivo: 000000 000 = 1/2 * 2-4
siguiente número representable: 000001 000 = (33/64) * 2 –4
diferencia: = (1/64) * 2 –4
h) Resolución máxima negativa:
mayor número representable negativo: 111111 111 = -7,875
anterior número representable: 111110 111 = -7,75
diferencia: = 0,125
i ) Resolución mínima negativa:
menor número representable negativo: 100000 000 = -1/32
siguiente número representable: 100001 000 = -(33/64) * 2-4
diferencia: = -(1 /64) * 2-4
Dadas las siguientes representaciones:
p = 00011010 1101
q = 00001001 1111
Queremos hallar el resultado de la suma de las mismos.
Para esto, tenemos que igualar los exponentes. Dado que el exponente de p es menor que el del q, o bien subimos el exponente de p, o bien bajamos el de q. Subir el exponente de un número implica hacer un corrimiento a derecha de la mantisa; bajar el exponente implica hacer un corrimiento a izquierda de la mantisa.
Subiendo en 1 el exponente de p obtenemos:
00001101 1110
Todavía el exponente sigue siendo menor que el de q, con lo cual tendríamos que hacer otro corrimiento. Pero dado que el ultimo bit de la mantisa es un 1, no lo podemos hacer.
Bajando en 1 el exponente de q obtenemos:
00010010 1110
Todavía el exponente sigue siendo mayor que el de p, con lo cual tendríamos que hacer otro corrimiento.
Bajando en 1 el exponente obtenemos :
00100100 1101
Con lo cual conseguimos igualar los exponentes.
Ahora realizamos la suma de las mantisas :
00011010
00100100
00111110
Por tanto, el resultado de la suma es: 00111110 1111