Decimal densamente empaquetado - Densely packed decimal

El decimal densamente empaquetado ( DPD ) es un método eficaz para la codificación binaria de dígitos decimales .

El sistema tradicional de codificación binaria para dígitos decimales, conocido como decimal codificado en binario (BCD), utiliza cuatro bits para codificar cada dígito, lo que resulta en un desperdicio significativo de ancho de banda de datos binarios (ya que cuatro bits pueden almacenar 16 estados y se utilizan para almacenar solo 10), incluso cuando se utiliza BCD empaquetado . El decimal densamente empaquetado es un código más eficiente que empaqueta tres dígitos en diez bits utilizando un esquema que permite la compresión o expansión a BCD con solo dos o tres retrasos en la puerta de hardware .

La codificación decimal densamente empaquetada es un refinamiento de la codificación Chen-Ho ; ofrece las mismas ventajas de compresión y velocidad, pero la disposición particular de los bits utilizados confiere ventajas adicionales:

  • La compresión de uno o dos dígitos (en los cuatro o siete bits óptimos respectivamente) se logra como un subconjunto de la codificación de tres dígitos. Esto significa que se pueden codificar de manera eficiente números arbitrarios de dígitos decimales (no solo múltiplos de tres dígitos). Por ejemplo, 38 = 12 × 3 + 2 dígitos decimales se pueden codificar en 12 × 10 + 7 = 127 bits; es decir, se pueden codificar 12 conjuntos de tres dígitos decimales utilizando 12 conjuntos de diez bits binarios y los dos dígitos decimales restantes. se puede codificar utilizando otros siete bits binarios.
  • La codificación de subconjunto mencionada anteriormente son simplemente los bits más a la derecha de la codificación estándar de tres dígitos; el valor codificado se puede ampliar simplemente agregando 0 bits iniciales.
  • Todos los números BCD de siete bits (0 a 79) están codificados de forma idéntica por DPD. Esto hace que las conversiones de números pequeños comunes sean triviales. (Esto debe descomponerse en 80, porque eso requiere ocho bits para BCD, pero la propiedad anterior requiere que la codificación DPD debe caber en siete bits).
  • El bit de orden inferior de cada dígito se copia sin modificar. Por lo tanto, la parte no trivial de la codificación puede considerarse una conversión de tres dígitos de base 5 a siete bits binarios. Además, los valores lógicos de dígitos (en los que cada dígito es 0 o 1) se pueden manipular directamente sin que sea necesaria ninguna codificación o decodificación.

Historia

En 1969, Theodore M. Hertz, y en 1971, Tien Chi Chen (陳 天機) con Irving Tze Ho (何宜慈) idearon códigos de prefijo sin pérdida (denominados codificaciones Hertz y Chen-Ho ) que empaquetaban tres dígitos decimales en diez bits binarios utilizando un esquema que permitía la compresión o expansión a BCD con solo dos o tres retrasos de puerta en el hardware. El decimal densamente empaquetado es un refinamiento de esto, ideado por Mike F. Cowlishaw en 2002, que se incorporó a las normas IEEE 754-2008 e ISO / IEC / IEEE 60559: 2011 para coma flotante decimal .

Codificación

Al igual que la codificación Chen-Ho, la codificación DPD clasifica cada dígito decimal en uno de dos rangos, según el bit más significativo de la forma binaria: los dígitos "pequeños" tienen valores de 0 a 7 (0000-0111 binarios) y los dígitos "grandes" , 8 a 9 (binario 1000-1001). Una vez que se sabe o se ha indicado que un dígito es pequeño, todavía se requieren tres bits más para especificar el valor. Si se ha indicado un valor grande, solo se requiere un bit para distinguir entre los valores 8 o 9.

Al codificar, los bits más significativos de cada uno de los tres dígitos a codificar determinan uno de los ocho patrones de codificación para los bits restantes, de acuerdo con la siguiente tabla. La tabla muestra cómo, al decodificar, los diez bits de la forma codificada en las columnas b9 a b0 se copian en los tres dígitos d2 a d0 , y los bits restantes se completan con ceros o unos constantes.

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 bits b7, b4 y b0 ( c, fy i) se pasan a través de la codificación sin cambios y no afectan el significado de los otros bits. Los siete bits restantes se pueden considerar una codificación de siete bits para tres dígitos de base 5.

Los bits b8 y b9 no son necesarios y se ignoran al decodificar grupos DPD con tres dígitos grandes (marcados como "x" en la última fila de la tabla anterior), pero se rellenan con ceros al codificar.

Los ocho 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.)

Ejemplos de

Esta tabla muestra algunos números decimales representativos y sus codificaciones en BCD, Chen – Ho y decimal densamente empaquetado (DPD):

Decimal BCD Chen – Ho DPD
005 0000 0000 0101 000 000 0101 000 000 0101
009 0000 0000 1001 110 000 0001 000 000 1001
055 0000 0101 0101 000 010 1101 000 101 0101
079 0000 0111 1001 110 011 1001 000 111 1001
080 0000 1000 0000 101 000 0000 000 000 1010
099 0000 1001 1001 111 000 1001 000 101 1111
555 0101 0101 0101 010 110 1101 101 101 0101
999 1001 1001 1001 111111 1001 0011111111

Ver también

Referencias

Otras lecturas