¿Cómo se convierte a partir de un número decimal a formato IEEE de punto flotante de precisión simple 754?
-
18-09-2019 - |
Pregunta
¿Cómo hago para cambiar manualmente sobre un número decimal (base 10) en formato de punto flotante 754 con precisión simple IEEE? Entiendo que hay tres partes a la misma, un signo, un exponente y una mantisa. Simplemente no lo entiendo completamente lo que las dos últimas partes representan en realidad.
Solución
Para la mayor potencia de 2, que es más pequeño que su número, por ejemplo, si usted comienza con x = 10,0 continuación, 2 3 = 8, por lo que el exponente es 3. El exponente está sesgada por 127 por lo esto significa que el exponente se representa como 127 + 3 = 130. la mantisa es entonces 10,0 / 8 = 1,25. El 1 es implícita, así que sólo necesidad de representar 0.25, que es 010 0000 0000 0000 0000 0000 cuando se expresa como una cantidad fraccional sin signo de 23 bits. El bit de signo es 0 para positivo. Así tenemos:
s | exp [130] | mantissa [(1).25] |
0 | 100 0001 0 | 010 0000 0000 0000 0000 0000 |
0x41200000
Puede probar la representación con un programa simple en C, por ejemplo.
#include <stdio.h>
typedef union
{
int i;
float f;
} U;
int main(void)
{
U u;
u.f = 10.0;
printf("%g = %#x\n", u.f, u.i);
return 0;
}
Otros consejos
Tome un número 172.625.This número es el formato Base10.
Convertir este formato está en formato Base2 Para ello, primero convertir a 172 en formato binario
128 64 32 16 8 4 2 1
1 0 1 0 1 1 0 0
172=10101100
Convertir a 0.625 en formato binario
0.625*2=1.250 1
0.250*2=.50 0
0.50*2=1.0 1
0.625=101
formato binario de 172.625 = 10,101,100.101. Esto está en formato Base2 10101100 * 2
El cambio de este número binario
1.0101100*2 **7 Normalized
1.0101100 is mantissa
2 **7 is exponent
añadir exponente 127 7 + 127 = 134
134 en convertir a formato binario
134=10000110
El número es positivo tan signo del número 0
0 |10000110 |01011001010000000000000
Explicación: El alto orden de bits es el signo del número. número se almacena en un formato de señal de magnitud. El exponente se almacena en formato de campo de 8 bits sesgada por 127 al exponente El dígito a la derecha del punto binario almacenado en el orden inferior de 23 bits. NOTA --- Este formato es IEEE formato de coma flotante de 32 bits
Un número de coma flotante es simplemente notación científica . Digamos que he preguntado para expresar la circunferencia rel="noreferrer"> , usando científica notación. Se podría escribir:
4.007516 × 10 7 m
El exponente es sólo eso: la potencia de diez aquí. La mantisa es las cifras reales del número. Y el signo, por supuesto, es sólo positivo o negativo. Así que en este caso el exponente es 7 y la mantisa es 4,007516.
La única diferencia significativa entre IEEE754 y la notación científica de escuela primaria es que los números de coma flotante están en base 2 , así que no es multiplicado por diez a la potencia de algo, es de dos veces a la potencia de alguna cosa. Entonces, ¿dónde podría escribir, por ejemplo, 256 en notación científica humano ordinario como:
2,56 × 10 2 (mantisa 2,56 y el exponente 2),
en IEEE754, es
1 × 2 8 -. La mantisa es 1 y el exponente es 8