stringtranslate.com

formato de punto flotante decimal32

En informática , decimal32 es un formato de numeración informática de punto flotante decimal que ocupa 4 bytes (32 bits) en la memoria de la computadora. Está destinado a aplicaciones en las que es necesario emular exactamente el redondeo decimal, como cálculos financieros y fiscales. Al igual que el formato binario16 , está destinado al almacenamiento que ahorra memoria.

Decimal32 admite 7 dígitos decimales de significado y un rango de exponente de −95 a +96, es decir, ±0,000 000 × 10 −95^ a ± 9,999 999 × 10 96^ . (Equivalentemente, ±0 000 000 × 10 −101^ a ±9 999 999 × 10 90^ .) Debido a que el significado no está normalizado (no hay un "1" inicial implícito), la mayoría de los valores con menos de 7 dígitos significativos tienen múltiples representaciones posibles ; 1 × 10 2 = 0,1 × 10 3 = 0,01 × 10 4 , etc. El cero tiene 192 representaciones posibles (384 cuando se incluyen ambos ceros con signo ).

El punto flotante Decimal32 es un formato de punto flotante decimal relativamente nuevo, introducido formalmente en la versión 2008 [1] de IEEE 754, así como con ISO/IEC/IEEE 60559:2011 . [2]

Representación de valores decimal32

IEEE 754 permite dos métodos de representación alternativos para valores decimal32. El estándar no especifica cómo indicar qué representación se utiliza, por ejemplo en una situación en la que se comunican valores decimal32 entre sistemas.

En un método de representación, basado en decimal entero binario (BID), el significado se representa como un entero positivo codificado en binario.

El otro método de representación alternativo se basa en decimal densamente empaquetado (DPD) para la mayor parte del significado (excepto el dígito más significativo).

Ambas alternativas proporcionan exactamente el mismo rango de números representables: 7 dígitos de significado y 3 × 2 6 = 192 valores de exponente posibles.

En ambas codificaciones, BID y DPD, los 2 bits exponentes más significativos y los 4 bits más significativos del significado se combinan en 5 bits. La posición de los 5 bits en el campo de combinación varía, pero por lo demás la codificación es idéntica. 5 bits son suficientes en lugar de 6, porque los 2 MSB del exponente sólo codifican valores de 0 a 2 (3 valores posibles), y los 4 MSB del significado representan un dígito decimal entre 0 y 9 (10 valores posibles). En total tenemos 3*10 = 30 valores posibles cuando se combinan en una codificación, que es representable en 5 bits ( ).

Para la codificación BID, el significado binario completo se obtiene agregando los bits del campo de significado final a los MSB del significado, como se muestra en la tabla BID anterior. El significado resultante es un entero binario positivo de 24 bits, que debe dividirse por 10 repetidamente para obtener los dígitos decimales individuales.

Para la codificación DPD, la tabla DPD anterior muestra cómo obtener el dígito decimal inicial del significado a partir de los MSB del significado. Para obtener los dígitos decimales significativos finales, el campo final significativo debe decodificarse de acuerdo con las reglas DPD (ver más abajo). El significado decimal completo se obtiene luego concatenando los dígitos decimales iniciales y finales.

Para ±Infinito, además del bit de signo, se ignoran todos los bits restantes (es decir, los campos de exponente y significado no tienen ningún efecto). Para NaN, el bit de signo no tiene significado en el estándar y se ignora. Por lo tanto, los NaN firmados y sin firmar son equivalentes, aunque algunos programas mostrarán los NaN como firmados. El bit g5 determina si el NaN está en silencio (0) o en señalización (1). Los bits del significado son la carga útil del NaN y pueden contener datos definidos por el usuario (por ejemplo, para distinguir cómo se generaron los NaN). Al igual que con los significados normales, la carga útil de NaN puede estar en codificación BID o DPD.

Campo de significado de entero binario

Este formato utiliza un significado binario de 0 a 10 7 − 1 = 9 999 999 = 98967F 16 = 1001 1000100101 1001111111 2 . La codificación puede representar significados binarios de hasta 10 × 2 20 − 1 = 10 485 759 = 9FFFFF 16 = 1001 1111111111 1111111111 2 , pero los valores mayores que 10 7 − 1 son ilegales (y el estándar requiere implementaciones para tratarlos como 0, si encontrado en la entrada).

Como se describió anteriormente, la codificación varía dependiendo de si los 4 bits más significativos del significado están en el rango de 0 a 7 (0000 2 a 0111 2 ), o superior (1000 2 o 1001 2 ).

Si el2 bits después del bit de signo son "00", "01" o "10", entonces el campo exponente consta del8 bits después del bit de signo, y el significado es el resto23 bits , con un bit 0 inicial implícito:

s 00eeeeee (0)ttt tttttttttt tttttttttts 01eeeeee (0)ttt tttttttttt tttttttttts 10eeeeee (0)ttt tttttttttt tttttttttt

Esto incluye números subnormales donde el dígito significativo principal es 0.

Si el2 bits después del bit de signo son "11", luego el campo exponente de 8 bits se desplaza2 bits a la derecha (después del bit de signo y de los bits "11" posteriores), y el significado representado está en el resto21 bits . En este caso hay una secuencia inicial implícita (es decir, no almacenada) de 3 bits "100" en el verdadero significado.

s 1100eeeeee (100)t tttttttttt tttttttttts 1101eeeeee (100)t tttttttttt tttttttttts 1110eeeeee (100)t tttttttttt tttttttttt

La secuencia de 2 bits "11" después del bit de signo indica que hay un prefijo implícito de 3 bits "100" para el significado. Compare tener un 1 implícito en el significado de los valores normales para los formatos binarios. Los bits "00", "01" o "10" forman parte del campo exponente.

Los bits iniciales del campo de significado no codifican el dígito decimal más significativo; son simplemente parte de un número binario puro más grande. Por ejemplo, un significado de 8 000 000 se codifica como binario 0111 1010000100 1000000000 , con el encabezado4 bits que codifican 7; el primer significado que requiere un bit 24 es 2 23 = 8 388 608

En los casos anteriores, el valor representado es

(−1) signo × 10 exponente −101 × significado

Si los cuatro bits después del bit de signo son "1111", entonces el valor es infinito o NaN, como se describe anteriormente:

s 11110 xx...x ±infinitos 11111 0x...xa NaN silenciosos 11111 1x...xa señalización NaN

Campo de significado decimal densamente empaquetado

En esta versión, el significado se almacena como una serie de dígitos decimales. El dígito inicial está entre 0 y 9 (3 o 4 bits binarios) y el resto del significado utiliza la codificación decimal densamente empaquetada (DPD).

El líder2 bits del exponente y el dígito principal (3 o4 bits ) del significado se combinan en los cinco bits que siguen al bit de signo.

Estos seis bits siguientes son el campo de continuación del exponente, que proporciona los bits menos significativos del exponente.

El último20 bits son el campo de continuación significativo, que consta de dos declets de 10 bits . [3] Cada declet codifica tres dígitos decimales [3] utilizando la codificación DPD.

Si los primeros dos bits después del bit de signo son "00", "01" o "10", entonces esos son los bits iniciales del exponente, y los tres bits posteriores se interpretan como el dígito decimal inicial (0 a 7). ):

s 00 TTT (00)eeeeee (0TTT)[tttttttttt][tttttttttt]s 01 TTT (01)eeeeee (0TTT)[tttttttttt][tttttttttt]s 10 TTT (10)eeeeee (0TTT)[tttttttttt][tttttttttt]

Si los dos primeros bits después del bit de signo son "11", entonces los dos segundos bits son los bits iniciales del exponente y el último bit tiene el prefijo "100" para formar el dígito decimal inicial (8 o 9):

s 1100 T (00)eeeeee (100T)[tttttttttt][tttttttttt]s 1101 T (01)eeeeee (100T)[tttttttttt][tttttttttt]s 1110 T (10)eeeeee (100T)[tttttttttt][tttttttttt]

Las dos combinaciones restantes (11110 y 11111) del campo de 5 bits se utilizan para representar ± infinito y NaN, respectivamente.

La transcodificación DPD/3BCD para los declets se proporciona en la siguiente tabla. b9...b0 son los bits del DPD y d2...d0 son los tres dígitos BCD.

Los 8 valores decimales cuyos dígitos son todos 8 o 9 tienen cuatro codificaciones cada uno. Los bits marcados con x en la tabla anterior se ignoran en la entrada, pero siempre serán 0 en los resultados calculados. (Las codificaciones no estándar 8 × 3 = 24 llenan el espacio entre 10 3 = 1000 y 2 10 = 1024 ).

En los casos anteriores, con el verdadero significado como la secuencia de dígitos decimales decodificados, el valor representado es

Ver también

Referencias

  1. ^ Sociedad de Computación IEEE (29 de agosto de 2008). Estándar IEEE para aritmética de punto flotante. IEEE . doi :10.1109/IEEESTD.2008.4610935. ISBN 978-0-7381-5753-5. Norma IEEE 754-2008 . Consultado el 8 de febrero de 2016 .
  2. ^ "ISO/IEC/IEEE 60559:2011". 2011 . Consultado el 8 de febrero de 2016 . {{cite journal}}: Citar diario requiere |journal=( ayuda )
  3. ^ ab Müller, Jean-Michel; Brisebarre, Nicolás; de Dinechin, Florent; Jeannerod, Claude-Pierre; Lefèvre, Vicente; Melquiond, Guillaume; Revol, Nathalie ; Stehlé, Damián; Torres, Serge (2010). Manual de aritmética de coma flotante (1 ed.). Birkhäuser . doi :10.1007/978-0-8176-4705-6. ISBN 978-0-8176-4704-9. LCCN  2009939668.
  4. ^ Cowlishaw, Michael Frederic (13 de febrero de 2007) [3 de octubre de 2000]. "Un resumen de la codificación decimal densamente empaquetada". IBM . Archivado desde el original el 24 de septiembre de 2015 . Consultado el 7 de febrero de 2016 .