tutorial: representación de números en formato de punto flotante, con el formato de 24 bits, IEEE-754 modificado.

 

 

 

Cuando se utilizan lenguajes de alto nivel en sistemas de microcontrol, como BASIC ó C, existe la posibilidad de definir las variables empleadas en los programas como: enteras positivas, enteras con signo, ó de punto flotante. Los valores de las variables enteras son almacenados en memoria con los formatos explicados en el tutorial correspondientes.

La representación de punto flotante permite almacenar en memoria número reales (es decir, valores que pueden ser positivos ó negativos y manejar punto decimal), siempre en un formato fijo de 24 ó 32 bits, dependiendo del compilador utilizado.

Los números representados en fomato de punto flotante son generados a partir de una mantisa y un exponente y pueden tomar valores muy grandes o muy pequeños. El exponente permite mover el punto del valor binario expresado en la mantisa, hasta +127 posiciones hacia la derecha ó -127 hacia la izquierda.

                                                        

Los compiladores C18 y CCS utilizan un formato de 4 bytes (32 bits). En el caso de los compiladores desarrollados por la compañía HiTech, el formato utiliza una versión modificada del estándar IEEE-754, y que consiste en la definición de cada valor en 24 bits ocupando 3 bytes de memoria, como se explica con detalle enseguida. 

Si desea ver la descripción el formato IEEE-754 original, dé click en este link.

VERSIÓN MODIFICADA DEL ESTÁNDAR IEEE-754, PARA LA REPRESENTACIÓN DE NÚMEROS REALES EN FORMATO DE PUNTO FLOTANTE:

El valor se expresa como un bit del signo, un exponente de 8 bits y una mantisa de 15 bits a la cual, al realizar la conversión a su valor real, se añade un "1" implícito al valor almacenado en memoria, formando finalmente una mantisa de 16 bits.

BYTE 1 BYTE 2 BYTE 3

SIGNO: es el bit 7 del BYTE 1. Si el valor es de 0, el número es positivo, si es 1, negativo.

EXPONENTE: es un valor de 8 bits, con un offset de 7FH. Para encontrar el valor real del exponente, se le debe restar -7FH al valor almacenado en memoria. Los 8 bits están formados por los 7 bits menos significativos del BYTE 1 y el bit más significativo del BYTE 2. El exponente real expresa el número de posiciones hacia la derecha (cuando el valor es positivo) o hacia la izquierda (cuando el valor es negativo) que debe de moverse el punto binario en la mantisa.

MANTISA: está formada por 15 bits. Estos 15 bits lo forman los 7 bits menos significativos del BYTE 2 y los 8 bits del BYTE 3. Al realizar la conversión a su valor real, se le debe añadir un "1" implícito, como se indica enseguida.

El "1" implícito: al realizar la conversión del valor almacenado en memoria, a la mantisa se le debe añadir siempre un "1" a la izquierda del valor binario de 15 bits, que finalmente forma la representación de 16 bits.

La posición del punto: la posición del punto, que separa a la parte entera de la parte fraccionaria, siempre estará inicialmente después (a la derecha) del "1" implícito de la mantisa. Esta posición inicial del punto habrá que moverla hacia la derecha o hacia la izquierda, según el valor del exponente real. Favor de ver los ejemplos mostrados abajo.

FORMATO PUNTO FLOTANTE.jpg (25457 bytes)

EJEMPLOS:

NUMERO DECIMAL EN FORMATO DE PUNTO FLOTANTE BIT DEL SIGNO EXPONENTE REAL MANTISA INCLUYENDO EL "1" IMPLICITO (EN BINARIO)
+1.0 3F 80 00 0 7F - 7F = 0 1.0 ...
+2.0 40 00 00 0 80 - 7F = +1 10.0 ...
+3.0 40 40 00 0 80 - 7F = +1 11.0 ...
-3.0 C0 40 00 1 80 - 7F = +1 11.0 ...
+0.5 3F 00 00 0 7E - 7F = -1 .10 ...
+10.0 41 20 00 0 82- 7F = +3 1010.0 ...
-100.0 C2 C8 00 1 85 - 7F = +6 1100100.0 ...
+3.1416 40 49 10 0 80 - 7F = +1 11.00100100010 ...
-1.25 BF A0 00 1 7F - 7F = 0 1.010 ...
+248.76 43 78 C3 0 86 - 7F = +7 11111000.11000011

                                 

DEFINICIÓN DE UNA VARIABLE DE PUNTO FLOTANTE EN C:

PI.jpg (12866 bytes)