Número de precisión simple

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 14 de marzo de 2016; las comprobaciones requieren 33 ediciones .

El número de precisión simple ( ing.  single precision , single ) es un formato informático muy extendido para representar números reales, que ocupa 32 bits (4 bytes ) en la memoria . Por regla general, se entiende como el formato de número de coma flotante del estándar IEEE 754 .

Los números de punto flotante de precisión simple son equivalentes en precisión a un número con 7-8 dígitos decimales significativos (promedio 7.6) que van desde a aproximadamente .

En las computadoras modernas, los cálculos de punto flotante están respaldados por un coprocesador de hardware ( FPU - Unidad  de punto flotante en inglés  ) . Sin embargo, en varias arquitecturas informáticas no hay soporte de hardware para números de punto flotante, y luego el trabajo con ellos se lleva a cabo en el software.

Señal
Ordenar mantisa
0 0 una una una una una 0 0 0 una 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  = 0.15625
31 24 23 dieciséis quince ocho 7 0

Para calcular el exponente , el desplazamiento del exponente igual a 12710 = 7F16 = 011111112 ( es decir, 011111002 - 011111112 = 12410 - 12710 = -310 ) se resta del campo de exponente de ocho bits . Dado que la parte entera siempre es igual a uno en la mantisa binaria normalizada , solo su parte fraccionaria se escribe en el campo de la mantisa, es decir el tamaño real de la mantisa de un solo número de precisión es de 24 bits. Para calcular la mantisa, la parte fraccionaria de la mantisa del campo de 23 bits de la parte fraccionaria de la mantisa 1.010000000000000000000000 2 se suma a uno . El número es igual al producto de la mantisa con signo por dos elevado a la potencia de orden = 1.01 2 *2 10 -3 10 = 101 2 *2 10 -5 10 = 5 10 *2 10 -5 10 = 0.15625 10 .

Patrón general para acceso bit a bit

unión { fl flotante ; uint32_t dw ; } f ; int s = ( f . dw >> 31 ) ? -1 : 1 ; /* Señal */ int e = ( f . dw >> 23 ) & 0xFF ; /* Ordenar */ int m = /* Mantisa */ mi ? ( f . dw y 0x7FFFFF ) | 0x800000 : ( f . dw & 0x7FFFFF ) << 1 ;

La fórmula de cálculo resultante (número de precisión simple) será s * (m * 2 ^ -23) * (2 ^(e-127)).

Ejemplos de uso

Pitón

Convierte una representación entera de precisión simple de un número (como cuatro bytes, orden inferior al principio) al tipo de número real incorporado de Python.

def dw2float ( dw_array ): afirmar ( len ( dw_array ) == 4 ) dw = int . from_bytes ( dw_array , orden de bytes = 'pequeño ' , firmado = Falso ) s = - 1 if ( dw >> 31 ) == 1 \ else 1 # Sign e = ( dw >> 23 ) & 0xFF ; # Orden m = (( dw & 0x7FFFFF ) | 0x800000 ) if e != 0 \ else (( dw & 0x7FFFFF ) << 1 ) # Mantissa m1 = m * ( 2 ** ( - 23 )) # Mantissa en float return s * m1 * ( 2 ** ( e - 127 ))

0.15625 10 en formato flotante se escribe como 3E20000016 , lo que equivale a cuatro bytes: [0x00,0x00,0x20,0x3E]. Salida del programa:

En[1]: dw2float([0x00,0x00,0x20,0x3E]) Salida[1]: 0.15625 En[2]: dw2float([0x00,0x00,0x20,0xBE]) Salida[2]: -0.15625

Ejemplos de números de precisión simple

Estos ejemplos se presentan como números hexadecimales de coma flotante. Incluyen bit de signo, exponente y mantisa.

3f80 0000 = 1 c000 0000 = −2 7f7f ffff ≈ 3,40282346639 × 10 38 (precisión única máxima) 0000 0001 = 2 -149 ≈ 1,40129846432 × 10 -45 (Número mínimo positivo de precisión simple - desnormalizado ) 0080 0000 = 2 -126 ≈ 1,17549435082 × 10 -38 (Número de precisión simple positivo normalizado mínimo) 0000 0000 = 0 8000 0000 = -0 7f80 0000 = infinito ff80 0000 = −infinito 3eaa aaab ≈ 1/3

Por lo general, cuando se convierten constantes numéricas a formato flotante, se realiza el redondeo. Por ejemplo, el número 1/3 se redondea hacia arriba.

Véase también

Enlaces