La Web del Programador: Comunidad de Programadores
 
    Pregunta:  62237 - FUNCION DE CONVERSION DE UNA PALABRA DOBLE A COMA FLOTANTE
Autor:  Ariel Abrahan Hernan
Estimados necesito encontrar la forma de convertir una palabra doble a coma flotante, para implementarlo en una RTU que se programa en lenguage lader y utiliza registros de memoria en 16bits. Desde ya muchas gracias a todos.-

  Respuesta:  Francisco Rogles
El formato estandar de un numero en coma flotante de 32 bits (norma IEEE 754) utiliza 23 bits para la mantisa, 8 para el exponente y 1 para el signo, corresponde a la estructura siguiente:

struct floatFormat
{
unsigned mantisa : 23;
unsigned exponente : 8;
unsigned signo : 1;
}
Los bits 0 a 22 contienen la mantisa (parte fraccionaria), de 23 bits, que llamaremos f, siendo el bit 0 el menos significativo y el bit 22 el más significativo. Los bits 23 a 30 contienen el exponente e, con exceso 127 (es decir, al valor obtenido con estos 8 bits hay que restarle 127). El bit 23 es el menos significativo, y el bit 30 el más significativo. El bit 31 corresponde al signo (0=positivo, 1=negativo). Un número X sería:
X = (-1)s * 2^(e-127) * 1.f
Los números así almacenados utilizan lo que se denomina mantisa normalizada, es decir, que el exponente queda de tal modo que la parte entera siempre sea un 1, el cual NO se guarda, con lo que se gana un bit.

El formato de coma flotante de 64 bits es similar, utiliza 52 bits de mantisa, 11 para exponente y 1 para signo. Funciona igual que el de 32 bits, excepto que el exceso del exponente es 1023. Un número X sería:
X = (-1)s * 2^(e-1023) * 1.f
Evidentemente, el formato de 64 bits tiene más precisión y alcanza un rango superior, a costa del espacio de almacenamiento.

Espero que, a partir de aquí, no te será difícil la conversión.

Saludos,
PACO