stringtranslate.com

formato de punto flotante decimal128

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

decimal128 admite 34 dígitos decimales de significado y un rango de exponentes 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 el significado no está normalizado, 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 decimal128.

IEEE 754 permite dos métodos de representación alternativos para valores decimal128. 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 decimales128 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: 34 dígitos de significado y 3 × 2 12 =12 288 posibles valores de exponentes.

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 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 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 34 − 1 = 9 999 999 999 999 999 999 999 999 999 999 999 = 1ED09BEAD87C0378D8E63FFFFFFFF 16 = 0111 1011010000 1001101111 1 010101101 1000011111 0000000011 0111100011 0110001110 0110001111 1111111111 1111111111 1111111111 2 . La codificación puede representar significados binarios 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 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 los 2 bits después del bit de signo son "00", "01" o "10", entonces el campo exponente consta de los 14 bits que siguen al bit de signo y el significado son los 113 bits restantes, con un 0 implícito a la izquierda. poco:

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 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 el resto. 111 bits. En este caso hay una secuencia inicial implícita (es decir, no almacenada) de 3 bits "100" en el verdadero significado.

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" 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.

Para el formato decimal128, todos estos significados 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 decimal32 y decimal64 .

En los casos anteriores, el valor representado es

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

Los dos primeros bits del exponente y el primer dígito (3 o 4 bits) del significado 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 significativo, que consta de once 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)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 el 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][tttttttttt] s 1101 T (01)eeeeeeeeeeee (100T)[tttttttttt][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][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.
  2. ^ Cowlishaw, Mike (2007). "Preguntas frecuentes sobre aritmética decimal - Parte 1 - Preguntas generales". speleotrove.com . Corporación IBM . 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. 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 .