Tätt packad decimal

Tätt packad decimal ( DPD ) är en effektiv metod för binär kodning av decimalsiffror .

Det traditionella systemet med binär kodning för decimalsiffror, känt som binärkodad decimal (BCD), använder fyra bitar för att koda varje siffra, vilket resulterar i betydande slöseri med binär databandbredd (eftersom fyra bitar kan lagra 16 tillstånd och används för att lagra endast 10), även när du använder packad BCD . Tätt packad decimal är en effektivare kod som packar tre siffror i tio bitar med hjälp av ett schema som tillåter komprimering från, eller expansion till, BCD med endast två eller tre hårdvaruportfördröjningar .

Den tätt packade decimalkodningen är en förfining av Chen-Ho-kodningen ; det ger samma komprimerings- och hastighetsfördelar, men det speciella arrangemanget av bitar som används ger ytterligare fördelar:

  • Komprimering av en eller två siffror (till de optimala fyra respektive sju bitarna) uppnås som en delmängd av den tresiffriga kodningen. Detta innebär att godtyckliga antal decimalsiffror (inte bara multiplar av tre siffror) kan kodas effektivt. Till exempel kan 38 = 12 × 3 + 2 decimalsiffror kodas i 12 × 10 + 7 = 127 bitar – det vill säga 12 uppsättningar med tre decimalsiffror kan kodas med 12 uppsättningar om tio binära bitar och de återstående två decimalsiffrorna kan kodas med ytterligare sju binära bitar.
  • Den delmängdskodning som nämns ovan är helt enkelt bitarna längst till höger av standardkodningen med tre siffror; det kodade värdet kan breddas helt enkelt genom att lägga till ledande 0 bitar.
  • Alla sjubitars BCD-nummer (0 till 79) kodas identiskt av DPD. Detta gör omvandlingar av vanliga små tal triviala. (Detta måste brytas ner vid 80, eftersom det kräver åtta bitar för BCD, men ovanstående egenskap kräver att DPD-kodningen måste passa in i sju bitar.)
  • Den låga ordningens bit av varje siffra kopieras oförändrad. Således kan den icke-triviala delen av kodningen betraktas som en omvandling från tre bas-5 siffror till sju binära bitar. Vidare kan siffermässigt logiska värden (där varje siffra är antingen 0 eller 1) manipuleras direkt utan att någon kodning eller avkodning är nödvändig.

Historia

1969 skapade Theodore M. Hertz, och 1971, Tien Chi Chen ( 陳天機 ) med Irving Tze Ho ( 何宜慈 ) förlustfria prefixkoder (refererade till som Hertz- och Chen-Ho-kodningar ) som packade tre binära siffror med tio decimaler. ett schema som möjliggjorde komprimering från eller expansion till BCD med endast två eller tre grindfördröjningar i hårdvara. Tätt packad decimal är en förfining av detta, utarbetad av Mike F. Cowlishaw 2002, som införlivades i standarderna IEEE 754-2008 och ISO/IEC/IEEE 60559:2011 för decimal flyttal .

Kodning

Liksom Chen–Ho-kodning klassificerar DPD-kodning varje decimalsiffra i ett av två intervall, beroende på den mest signifikanta biten i den binära formen: "små" siffror har värdena 0 till 7 (binära 0000–0111) och "stora" siffror , 8 till 9 (binärt 1000–1001). När det väl är känt eller har indikerats att en siffra är liten krävs fortfarande tre bitar till för att ange värdet. Om ett stort värde har indikerats krävs bara en bit för att skilja mellan värdena 8 eller 9.

Vid kodning bestämmer de mest signifikanta bitarna av var och en av de tre siffrorna som ska kodas ett av åtta kodningsmönster för de återstående bitarna, enligt följande tabell. Tabellen visar hur, vid avkodning, de tio bitarna av den kodade formen i kolumnerna b9 till b0 kopieras till de tre siffrorna d2 till d0 och de återstående bitarna fylls i med konstanta nollor eller ettor.

Tätt packade decimalkodningsregler
DPD-kodat värde Decimalsiffror
Kodutrymme (1024 stater) b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Värden kodade Beskrivning Förekomster (1 000 tillstånd)
50,0 % (512 delstater) a b c d e f 0 g h i 0abc 0def 0ghi (0–7) (0–7) (0–7) Tre små siffror 51,2 % (512 delstater)
37,5 % (384 delstater) a b c d e f 1 0 0 i 0abc 0def 100 i (0–7) (0–7) (8–9)
Två små siffror, en stor
38,4 % (384 delstater)
a b c g h f 1 0 1 i 0abc 100 f 0ghi (0–7) (8–9) (0–7)
g h c d e f 1 1 0 i 100 c 0def 0ghi (8–9) (0–7) (0–7)
9,375 % (96 delstater) g h c 0 0 f 1 1 1 i 100 c 100 f 0ghi (8–9) (8–9) (0–7)
En liten siffra, två stora
9,6 % (96 delstater)
d e c 0 1 f 1 1 1 i 100 c 0def 100 i (8–9) (0–7) (8–9)
a b c 1 0 f 1 1 1 i 0abc 100 f 100 i (0–7) (8–9) (8–9)
3,125 % (32 delstater, 8 använda) x x c 1 1 f 1 1 1 i 100 c 100 f 100 i (8–9) (8–9) (8–9) Tre stora siffror, bitarna b9 och b8 bryr sig inte 0,8 % (8 delstater)

Bitarna b7, b4 och b0 ( c , f och i ) förs genom kodningen oförändrade och påverkar inte betydelsen av de andra bitarna. De återstående sju bitarna kan betraktas som en sju-bitars kodning för tre bas-5 siffror.

Bitarna b8 och b9 behövs inte och ignoreras vid avkodning av DPD-grupper med tre stora siffror (markerade som "x" i sista raden i tabellen ovan), men fylls med nollor vid kodning.

De åtta decimalvärdena vars siffror alla är 8:or eller 9:or har fyra koder vardera. Bitarna markerade x i tabellen ovan ignoreras vid inmatning, men kommer alltid att vara 0 i beräknade resultat. (3 × 8 = 24 icke-standardkodningar fyller ut gapet mellan 10 3 = 1000 och 2 10 = 1024.)

Exempel

Den här tabellen visar några representativa decimaltal och deras kodningar i BCD, Chen–Ho och tätt packade decimaler (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 111 111 1001 001 111 1111

Se även

Vidare läsning