stringtranslate.com

formato de punto flotante decimal32

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

Decimal32 admite 7 dígitos decimales de mantisa 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 la mantisa no está normalizada (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 los 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 el decimal entero binario (BID), el mantisa 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 significación y 3 × 2 6 = 192 posibles valores de exponente.

En ambas codificaciones, BID y DPD, los 2 bits más significativos del exponente y los 4 bits más significativos del mantisa 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 solo codifican valores de 0 a 2 (3 valores posibles), y los 4 MSB del mantisa 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 añadiendo los bits del campo de significado final a los bits más significativos 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 mantisa a partir de los MSB del mantisa. Para obtener los dígitos decimales finales del mantisa, el campo final significativo debe decodificarse de acuerdo con las reglas DPD (ver a continuación). El mantisa decimal completo se obtiene entonces concatenando los dígitos decimales inicial y final.

Para ±Infinito, además del bit de signo, se ignoran todos los bits restantes (es decir, los campos de exponente y mantisa no tienen efecto). Para los NaN, el bit de signo no tiene significado en el estándar y se ignora. Por lo tanto, los NaN con signo y sin signo son equivalentes, aunque algunos programas mostrarán los NaN como con signo. El bit g5 determina si el NaN está en silencio (0) o en señalización (1). Los bits de la mantisa 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 para las mantisas normales, la carga útil de los NaN puede estar en codificación BID o DPD.

Campo de significación de entero binario

Este formato utiliza un significando binario de 0 a 10 7 − 1 = 9 999 999 = 98967F 16 = 1001 1000100101 1001111111 2 . La codificación puede representar significandos 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 que las implementaciones los traten como 0, si se encuentran en la entrada).

Como se describió anteriormente, la codificación varía dependiendo de si los 4 bits más significativos del significando 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 de exponente consta de8 bits después del bit de signo, y el significado es el restante23 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 de exponente de 8 bits se desplaza2 bits a la derecha (después del bit de signo y los bits "11" siguientes), y el significado representado está en el resto21 bits . En este caso, hay una secuencia implícita (es decir, no almacenada) de 3 bits iniciales "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" en la mantisa. Compárese con tener un 1 implícito en la mantisa de los valores normales para los formatos binarios. Los bits "00", "01" o "10" son parte del campo de exponente.

Los bits iniciales del campo de mantisa no codifican el dígito decimal más significativo; simplemente son parte de un número binario puro más grande. Por ejemplo, una mantisa de 8 000 000 se codifica como binario 0111 1010000100 1000000000 , con los bits iniciales4 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 × significando

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

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

Campo de significación decimal densamente empaquetado

En esta versión, la mantisa 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 de la mantisa utiliza la codificación decimal densamente empaquetada (DPD).

El líder2 bits del exponente y el dígito principal (3 oLos 4 bits ) del mantis 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 del significando, que consta de dos decletos de 10 bits . [3] Cada decleto codifica tres dígitos decimales [3] utilizando la codificación DPD.

Si los dos primeros bits después del bit de signo son "00", "01" o "10", entonces esos son los bits iniciales del exponente, y los tres bits siguientes 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 como 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 NaNs, 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 decodificadas, el valor representado es

Véase también

Referencias

  1. ^ IEEE Computer Society (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. IEEE Std 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}}: Requiere citar revista |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. Número de serie 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 .