formato de coma flotante decimal32 - decimal32 floating-point format

En informática , decimal32 es un formato de numeración de computadora de coma flotante decimal 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 de forma exacta, como cálculos financieros y fiscales. Al igual que el formato binary16 , está destinado al almacenamiento de ahorro de memoria.

Decimal32 admite 7 dígitos decimales de significando y un rango de exponente de −95 a +96, es decir, ± 0,000 000 × 10 −95^ a ± 9,999 999 × 10 96^ . (De manera equivalente, ± 0 000 001 × 10 -101^ a ± 9 999 999 × 10 90^ ). Debido a la mantisa no está normalizada (no hay ningún líder "1" implícitos), la mayoría de 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 de IEEE 754 , así como con ISO / IEC / IEEE 60559: 2011 .

Representación de valores decimal32

Codificación genérica
Firmar Combinación Campo de significado final
1 bit 11 bits 20 bits
s ggggggggggg tttttttttttttttttttt

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

En un método de representación, basado en decimal entero binario (BID), el significado se representa como 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 significando y 3 × 2 6 = 192 posibles valores de exponente.

En ambas codificaciones, BID y DPD, los 2 bits del exponente más significativo y los 4 bits más significativos del significando 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 significando 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 se puede representar en 5 bits (2 ^ 5 = 32).

Codificación BID del campo de combinación
Campo de combinación MSB de LSB del
exponente
Descripción
g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0 Exponente Significativo
0 0 D mi F gramo h I a B C 00 0 abc defghi Número finito
significado binario completo = 0 abc tttttttttttttttttttt
0 1 01
1 0 10
1 1 0 0 D mi F gramo h I C 00 100 c Número finito
significado binario completo = 100 c tttttttttttttttttttt
1 1 0 1 01
1 1 1 0 10
1 1 1 1 0 ± Infinito
1 1 1 1 1 NaN (con carga útil en Significand)
Codificación DPD del campo de combinación
Campo de combinación MSB de LSB del
exponente

Dígito decimal inicial de Significand
Descripción
g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0 Exponente Significativo
0 0 a B C D mi F gramo h I 00 0 abc defghi 4 * a + 2 * b + c Número finito con
0 1 01
1 0 10
1 1 0 0 C 00 100 c 8 + c Número finito con
1 1 0 1 01
1 1 1 0 10
1 1 1 1 0 ± Infinito
1 1 1 1 1 NaN (con carga útil en Significand)

Para la codificación BID, el significado binario completo se obtiene agregando los bits del campo de significado final a los MSB del significando, 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 primer dígito decimal del significando a partir de los MSB del significando. Para obtener los dígitos decimales significativos finales, el campo final significativo debe decodificarse de acuerdo con las reglas de DPD (ver más abajo). El significado decimal completo se obtiene luego concatenando los dígitos decimales iniciales y finales.

Para ± Infinito, además del bit de signo, todos los bits restantes se ignoran (es decir, los campos de exponente y significante 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 firmados y sin firmar son equivalentes, aunque algunos programas mostrarán los NaN firmados. El bit g5 determina si el NaN está en silencio (0) o en señalización (1). Los bits del significado son la carga útil del NaN y pueden contener datos definidos por el usuario (por ejemplo, para distinguir cómo se generaron los NaN). Como ocurre con los significados normales, la carga útil de los NaN puede estar en codificación BID o DPD.

Campo de significado de entero binario

Este formato utiliza un significand binario de 0 a 10 7  - 1 = 9 999 999  = 98967F 16  = 1001 1000100101 1001111111 2 . La codificación puede representar significandos binarias de hasta 10 × 2 20  - 1 = 10 485 759  = 9FFFFF 16  = 1001 1111111111 1111111111 2 , pero los valores más grandes que 10 7  - 1 son ilegal (y la norma requiere implementaciones 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 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 exponente consta de los 8 bits que siguen al bit de signo, y el significado son los 23 bits restantes, con un 0 implícito a la izquierda. poco:

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

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

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

s 1100eeeeee (100)t tttttttttt tttttttttt
s 1101eeeeee (100)t tttttttttt tttttttttt
s 1110eeeeee (100)t tttttttttt tttttttttt

La secuencia de 2 bits "11" después del bit de signo indica que hay un prefijo de 3 bits "100" implícito en 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 de 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 se codifica como binario 0111 1010000100 1000000000 , con los 4 bits iniciales codificando 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 anteriormente:

s 11110 xx...x    ±infinity
s 11111 0x...x    a quiet NaN
s 11111 1x...x    a signalling 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 2 bits iniciales del exponente y el dígito inicial (3 o 4 bits) del significando se combinan en los cinco bits que siguen al bit de signo.

Estos seis bits posteriores son el campo de continuación del exponente, que proporciona los bits menos significativos del exponente.

Los últimos 20 bits son el campo de continuación significativo, que consta de dos declets de 10 bits . Cada delet codifica tres dígitos decimales 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 posteriores 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", los segundos dos 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)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 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.

Reglas de codificación decimal densamente empaquetadas
Valor codificado DPD Dígitos decimales
Espacio de código (1024 estados) b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Valores codificados Descripción Ocurrencias (1000 estados)
50,0% (512 estados) a B C D mi F 0 gramo h I 0 abc 0 def 0 ghi (0–7) (0–7) (0–7) Tres dígitos pequeños 51,2% (512 estados)
37,5% (384 estados) a B C D mi F 1 0 0 I 0 abc 0 def 100 i (0–7) (0–7) (8–9) Dos dígitos pequeños,
uno grande
38,4% (384 estados)
a B C gramo h F 1 0 1 I 0 abc 100 f 0 ghi (0–7) (8–9) (0–7)
gramo h C D mi F 1 1 0 I 100 c 0 def 0 ghi (8–9) (0–7) (0–7)
9.375% (96 estados) gramo h C 0 0 F 1 1 1 I 100 c 100 f 0 ghi (8–9) (8–9) (0–7) Un dígito pequeño,
dos grandes
9,6% (96 estados)
D mi C 0 1 F 1 1 1 I 100 c 0 def 100 i (8–9) (0–7) (8–9)
a B C 1 0 F 1 1 1 I 0 abc 100 f 100 i (0–7) (8–9) (8–9)
3,125% (32 estados, 8 usados) X X C 1 1 F 1 1 1 I 100 c 100 f 100 i (8–9) (8–9) (8–9) Tres dígitos grandes, a los bits b9 y b8 no les importa 0,8% (8 estados)

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

Referencias