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.
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
, f
y 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
- Decimal codificado en binario (BCD)
- Decimal entero binario (BID)
- formato de coma flotante decimal32
- formato de coma flotante decimal64
- formato de coma flotante decimal128
- DEC RADIX 50 / MOD40
- IBM SQUOZE
Referencias
Otras lecturas
- Cowlishaw, Michael Frederic (25 de febrero de 2003) [20 de mayo de 2002, 27 de enero de 2001]. Escrito en Coventry, Reino Unido. "Codificador / decodificador de decimal a binario" (Patente de EE. UU.). Armonk, Nueva York, Estados Unidos: International Business Machines Corporation (IBM). US6525679B1 . Consultado el 18 de julio de 2018. [1] y Cowlishaw, Michael Frederic (2007-11-07) [2004-01-14, 2002-08-14, 2001-09-24, 2001-01-27]. Escrito en Winchester, Hampshire, Reino Unido. "Codificador / decodificador de decimal a binario" (Patente europea). Armonk, Nueva York, Estados Unidos: International Business Machines Corporation (IBM). EP1231716A2 . Consultado el 18 de julio de 2018 . [2] [3] [4] (NB. Esta patente es sobre DPD).
- Bonten, Jo HM (6 de octubre de 2009) [5 de octubre de 2006]. "Codificación decimal empaquetada IEEE-754-2008" . Archivado desde el original el 11 de julio de 2018 . Consultado el 11 de julio de 2018 .(NB. Puede encontrar una versión anterior aquí: Codificación decimal empaquetada IEEE-754r ).
- Savard, John JG (2018) [2007]. "Codificación de Chen-Ho y decimal densamente empaquetado" . quadibloc . Archivado desde el original el 3 de julio de 2018 . Consultado el 16 de julio de 2018 .