stringtranslate.com

formato de punto flotante decimal64

En informática , decimal64 es un formato de numeración informática de punto flotante decimal que ocupa 8 bytes (64 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.

Decimal64 admite 16 dígitos decimales de significado y un rango de exponentes 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 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 significado 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. El cero tiene 768 representaciones posibles (1536 si se incluyen ambos ceros con signo ).

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]


Representación de valores decimal64.

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

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

En ambos casos, los 4 bits más significativos del significado (que en realidad sólo 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 5 bits. campo. 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 NaN llenándola con un valor de un solo byte.

Campo de significado de entero binario

Este formato utiliza un significado 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, completamente almacenada en 64 bits, puede representar significados binarios de hasta 10 × 2 50 − 1 = 11 258 999 068 426 239 = 27FFFFFFFFFFFF 16 , pero valores mayores que 10 16 − 1 son ilegales (y el estándar requiere implementaciones para tratar ellos como 0, si se encuentran en la entrada).

Como se describió anteriormente, la codificación varía dependiendo de si el elemento más significativo4 bits del significado 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 del10 bits después del bit de signo, y el significado es el resto53 bits , con un principio 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 exponente de 10 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 resto51 bits . En este caso hay una secuencia inicial implícita (es decir, no almacenada) de 3 bits "100" para la mayoría de los bits del significado verdadero (en los bits inferiores restantes ttt...ttt del significado, no todos los valores posibles son usado).

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" para el significado. Compárese con tener un prefijo "1" implícito de 1 bit en el significado de los valores normales para los formatos binarios. Las secuencias de 2 bits "00", "01" o "10" después del bit de signo 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 000 000 000 se codifica como binario 0111 0001101011 1111010100 1001100011 0100000000 0000000000 2 , con el encabezado4 bits que codifican 7; el primer significado 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 sino implícitos como se muestra arriba; y el siguiente bit es siempre cero en codificaciones válidas).

En los casos anteriores, el valor representado es

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

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

0 11110 xx...x +infinito1 11110 xx...x -infinitox 11111 0x...xa NaN silenciosox 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 ocho bits posteriores 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 significativo, que consta de cinco 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 "TTT" posteriores 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 primeros dos 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 el prefijo de 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 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 coma 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 .