Sistemas de representación de longitud fija

 

Representación en coma flotante

En los sistemas de coma fija se representa exclusivamente a números enteros. Para representar a los números reales tenemos la posibilidad de utilizar el sistema BCD, pero no es frecuente por la lentitud en las operaciones aritméticas, y el sistema de coma flotante. Ademas, es común tener que representar números muy pequeños o muy grandes, lo que implica recurrir a un factor de escala (un escalando) para no tener que representar ceros.

Ejemplo

  0,0000000125=125*10-10 =0,125*10-7
  23450000000=2345*107=0,2345*1011

Hasta 1980, cada fabricante de computadoras tenia su propio formato de coma flotante. Sobra decir que todos eran diferentes. Peor aún, algunos de ellos de hecho efectuaban operaciones aritméticas incorrectas debido a que la aritmética de coma flotante tiene algunas peculiaridades que no resultan obvias para el diseñador promedio de hardware.
Para rectificar esta situación, a finales de los años 70 IEEE instituyó un comité para estandarizar la aritmética de coma flotante, no sólo para permitir el intercambio de datos de coma flotante entre las diferentes computadoras, sino también para proporcionar a los diseñadores de hardware de un modelo que supieran que era correcto. El trabajo resultante condujo a la norma Número 754 del IEEE (IEEE, 1985). Hoy en día, la mayoría de las CPU tienen un coprocesador de coma flotante y todas ellas se ajustan a la norma de coma flotante del IEEE. A diferencia de muchos estándares que tienden a ser compromisos mediocres que no satisfacen a nadie, esta norma no está mal.
El valor del número viene dado por:

  V(X) = M*2E

Donde M es mantisa y E exponente de base 2.
En la representación en coma flotante se dividen los n bits, disponibles para representar un dato, en dos partes, una para la mantisa M (o fracción) y otra para el 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 significativo del dato, mientras que el exponente indica el factor de escala, en forma de una potencia de base 2.

Considera dos formatos básicos, el de simple y el de doble precisión, que se representan seguidamente.

 


El exponente se representa en exceso a 127 para precisión simple y a 1023 en precisión doble.

La mantisa que se representa es la fracción que queda luego de desplazar la coma detrás del primer 1. Este primer bit significativo de la mantisa que siempre es 1 no se representa, esto permite representar un bit más. La coma fraccionaria de la mantisa se considera después de dicho 1 de la siguiente manera: 1,M.

Por tanto los valores de cada formato son los siguientes:

(-1)s*1,M*2E-127 para 0<E<255 (Los valores para E= 0 y E=255 son
especiales como lo veremos enseguida)
(-1)s*1,M*2E-1023 para 0<E<2047

Obsérvese que se ha colocado la coma a la derecha del dígito más significativo, lo que significa que la normalización es entre 1,0000... y 1,11111...

Ejemplo 1:
Supongamos que queremos representar el número 12,375
Este número debemos pasarlo a binario. Para ello pasamos primero la parte entera y luego la decimal. El número binario es: 1100,011
Para representarlo en coma flotante debemos expresarlo en la form 1,M y ajustar el exponente. En este caso será 1,100011 2 3 o mejor si lo expresamos todo en binario 1,100011 (10) 11
Ahora la representación es:
Sm (Signo de mantisa) es 0 por ser positivo
El exponente es 11 (3) que en exceso a 127 es 10000010
La mantisa es 100011 (los valores detrás de la coma).

 

Si formateamos a los 32 bits en campos de 4 bits podemos expresarlos en hexadecimal de la siguiente manera:

 

Ejemplo 2:
Representar el número -0,005

Convertido a binario es -0,0000000101 = - 1,01 (10)-1000

El signo de mantisa es negativo por lo tanto el valor es 1
La mantisa 01
El exponente es - 8 +127= 119 en binario es 01110111


Ejemplo 3: En la primer columna están los valores que hemos almacenados en hexadecimal (8 digitos). En la segunda columna se encuentran el dato que está representado.

3F 80 0000
20*1,000000000...0 = 1.0
BF 80 0000
-20*1,000000000...0 =-1.0
40 00 0000
21*1,000000000...0 =2.0
3F 00 0000
2-1* 1,000000000...0=0,5
3F C00000
20* 1,100000000...0=1,5

 

Adicionalmente considera varios casos especiales:

1) E = 0 y M = 0, se emplea para representar el cero.
2) E = 0 y M distinto de cero, se emplea para representar números pequeños en forma desnormalizada,
(-1)s*2-127* 0,M
El último caso merece una atención especial. En efecto, para cubrir el hueco dejado por la representación en coma flotante con mantisa normalizada, y conseguir una representación cercana al cero, este estándar emplea la representación no normalizada para E = 0. El rango de las mantisas no normalizadas es de :


2-127* 0,0000...001 hasta 2-127* 0,1111...1111
o sea 2-127 * 2-23 = 2-150 hasta (aprox) 2-127 *1,0 para precisión simple

o desde 2-1023* 0,0000...001 hasta 2-1023* 0,1111...1111 para precisión doble
Ahora, en el primer caso, se puede obtener un mínimo de 2-150, que es más cercano al cero.

3) E = 255 y M = 0 indica, de acuerdo al bit s, valor infinito positivo o negativo.
4) E = 255 y M distinto de 0, se emplea para indicar que el resultado no tiene sentido (por ejemplo. resultado de 0/0)

 

Como conclusión expresamos que la representación en coma flotante se utiliza para representar a los números reales. Sin embargo no puede representar a todos ya que estos son infinitos y la capacidad de almacenamiento en coma flotante es finita. El exponente determina el rango de la recta real, es decir los segmentos de ella, mientras que la mantisa determina la precisión (longitud del mínimo intervalo).