stringtranslate.com

formato de punto flotante decimal64

En informática , decimal64 es un formato de numeración decimal de punto flotante que ocupa 8 bytes (64 bits) en la memoria de la computadora. Está destinado a aplicaciones en las que es necesario emular con exactitud el redondeo decimal, como cálculos financieros y fiscales.

El punto flotante decimal64 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]

Formato

Decimal64 admite 16 dígitos decimales de significando y un rango de exponente de −383 a +384, es decir, ±0,000 000 000 000 000 × 10 −383^ a ±9,999 999 999 999 999 × 10 384^ . (Equivalentemente, ±0 000 000 000 000 000 × 10 −398^ a ±9 999 999 999 999 999 × 10 369^ .) Por el contrario, el formato binario correspondiente, que es el tipo más comúnmente utilizado, tiene un rango aproximado de ±0,000 000 000 000 001 × 10 −308 a^ ± 1,797 693 134 862 315 × 10 308^ . Debido a que el mantisa no está normalizado, la mayoría de los valores con menos de 16 dígitos significativos tienen múltiples representaciones posibles; 1 × 10 2 = 0,1 × 10 3 = 0,01 × 10 4 , etc. Este conjunto de representaciones para un mismo valor se denomina cohorte . El cero tiene 768 representaciones posibles (1536 si se incluyen ambos ceros con signo , en dos cohortes diferentes).

Codificación de valores decimal64

IEEE 754 permite dos codificaciones alternativas para los valores decimal64. 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 decimal64 entre sistemas:

Ambas alternativas proporcionan exactamente el mismo conjunto de números representables: 16 dígitos de la mantisa y 3 × 2 8 = 768 posibles valores de exponente decimal. (Todos los posibles valores de exponente decimal almacenables en un número binario64 son representables en decimal64, y la mayoría de los bits de la mantisa de un binario64 se almacenan manteniendo aproximadamente la misma cantidad de dígitos decimales en la mantisa).

En ambos casos, los 4 bits más significativos del mantisa (que en realidad solo tienen 10 valores posibles) se combinan con los 2 bits más significativos del exponente (3 valores posibles) para utilizar 30 de los 32 valores posibles de un campo de 5 bits. Las combinaciones restantes codifican infinitos y NaN .

En los casos de Infinity y NaN, se ignoran todos los demás bits de la codificación. Por lo tanto, es posible inicializar una matriz en Infinities o NaNs llenándola con un único valor de byte.

Campo de significación de entero binario

Este formato utiliza un mantra binario de 0 a 10 16 − 1 = 9 999 999 999 999 999 = 2386F26FC0FFFF 16 = 1000 1110000110 1111001001 1011111100 0000111111 1111111111 2 .

La codificación, almacenada completamente en 64 bits, puede representar significandos binarios de hasta 10 × 2 50 − 1 = 11 258 999 068 426 239 = 27FFFFFFFFFFFF 16 , pero los valores mayores que 10 16 − 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 el más significativoLos 4 bits del mantis están en el rango de 0 a 7 (0000 2 a 0111 2 ), o superior (1000 2 o 1001 2 ).

Si los 2 después del bit de signo son "00", "01" o "10", entonces el campo de exponente consta de los10 bits después del bit de signo, y el significado es el restante53 bits , con un líder implícito0 bits :

s 00eeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttts 01eeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttts 10eeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt 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 10 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 resto51 bits . En este caso, hay una secuencia implícita (es decir, no almacenada) de 3 bits iniciales "100" para la mayoría de los bits de la mantisa verdadera (en los bits inferiores restantes ttt...ttt de la mantisa, no se utilizan todos los valores posibles).

s 1100eeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttts 1101eeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttts 1110eeeeeeee (100)t tttttttttt tttttttttt tttttttttt 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 prefijo implícito de 1 bit "1" en la mantisa de los valores normales para los formatos binarios. Las secuencias de 2 bits "00", "01" o "10" después del bit de signo son parte del campo de exponente.

Los bits iniciales del campo de mantisa no codifican el dígito decimal más significativo; son simplemente parte de un número binario puro más grande. Por ejemplo, una mantisa de 8 000 000 000 000 000 se codifica como binario 0111 0001101011 1111010100 1001100011 0100000000 0000000000 2 , con los bits iniciales4 bits que codifican 7 ; el primer significando que requiere un bit 54 es 2 53 = 9 007 199 254 740 992. El significativo válido más alto es 9 999 999 999 999 999 cuya codificación binaria es (100)0 1110000110 1111001001 1011111100 0000111111 1111111111 2 (con los 3 bits más significativos (100) no almacenados pero implícitos como se muestra arriba; y el siguiente bit siempre es cero en codificaciones válidas).

En los casos anteriores, el valor representado es

(−1) signo × 10 exponente −398 × significando

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

0 11110 xx...x +infinito1 11110 xx...x -infinitox 11111 0x...xa tranquilo NaNx 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.

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

El último50 bits son el campo de continuación del significando, que consta de cinco 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 "TTT" después de eso se interpretan como el dígito decimal inicial (0 a 7):

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

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

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

Las dos combinaciones restantes (11 110 y 11 111) del campo de 5 bits después del bit de signo 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 .