stringtranslate.com

formato de punto flotante decimal128

decimal128 es un formato numérico decimal de punto flotante que ocupa 128 bits en la memoria de la computadora . Introducido formalmente en IEEE 754-2008 , [1] está destinado a aplicaciones donde es necesario emular el redondeo decimal con exactitud, como cálculos financieros y fiscales. [2]

decimal128 admite 34 dígitos decimales de mantisa y un rango de exponente de −6143 a +6144, es decir, ±0,000 000 000 000 000 000 000 000 000 000 000 × 10 −6143^ a ±9,999 999 999 999 999 999 999 999 999 999 999 × 10 6144^ . Debido a que la mantisa no está normalizada, la mayoría de los valores con menos de 34 dígitos significativos tienen múltiples representaciones posibles; 1 × 10 2 = 0,1 × 10 3 = 0,01 × 10 4 , etc. El cero tiene 12288 representaciones posibles (24576 incluido el cero negativo ).

Representación de valores decimales128

La norma IEEE 754 permite dos métodos de representación alternativos para los valores decimales 128. La norma no especifica cómo indicar qué representación se utiliza, por ejemplo, en una situación en la que se comunican valores decimales 128 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: 34 dígitos de significando y 3 × 2 12 =12 288 posibles valores de exponente.

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 5 bits en el campo de combinación. Las combinaciones restantes codifican infinitos y NaN .

En el caso 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 mantisa binario de 0 a 10 34 − 1 = 9 999 999 999 999 999 999 999 999 999 999 999 = 1ED09BEAD87C0378D8E63FFFFFFFF 16 = 0111 1011010000 1001101111 1010101101 1000011111 0000000011 0111100011 0110001110 0110001111 11111111111 1111111111 1111111111 2 . La codificación puede representar significandos binarios de hasta 10 × 2 110 − 1 = 12 980 742 146 337 069 071 326 240 823 050 239 pero los valores mayores que 10 34 − 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 los 2 bits después del bit de signo son "00", "01" o "10", entonces el campo de exponente consta de los 14 bits que siguen al bit de signo, y el significado son los 113 bits restantes, con un bit 0 inicial implícito:

s 00eeeeeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 01eeeeeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 10eeeeeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt 

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

Si los 2 bits después del bit de signo son "11", entonces el campo de exponente de 14 bits se desplaza 2 bits hacia la derecha (después del bit de signo y de los bits "11" posteriores), y el significado representado está en los 111 bits restantes. En este caso, hay una secuencia de 3 bits inicial implícita (es decir, no almacenada) "100" en el significado verdadero.

s 1100eeeeeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 1101eeeeeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 1110eeeeeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt 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 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.

Para el formato decimal128, todos estos significandos están fuera del rango válido (comienzan con 2 113 > 1.038 × 10 34 ), y por lo tanto se decodifican como cero, pero el patrón es el mismo que para decimal32 y decimal64 .

En los casos anteriores, el valor representado es

(−1) signo × 10 exponente −6176 × 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).

Los 2 bits iniciales del exponente y el dígito inicial (3 o 4 bits) del mantis se combinan en los cinco bits que siguen al bit de signo.

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

Los últimos 110 bits son el campo de continuación del significando, que consta de once 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)eeeeeeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 01 TTT (01)eeeeeeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 10 TTT (10)eeeeeeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][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)eeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 1101 T (01)eeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 1110 T (10)eeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][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. Norma IEEE 754-2008.
  2. ^ Cowlishaw, Mike (2007). "Preguntas frecuentes sobre aritmética decimal: parte 1: preguntas generales". speleotrove.com . IBM Corporation . Consultado el 29 de julio de 2022 .
  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 .