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.
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
- Binärkodad decimal (BCD)
- Binära heltalsdecimaler (BID)
- decimal32 flyttalsformat
- decimal64 flyttalsformat
- decimal128 flyttalsformat
- DEC RADIX 50 / MOD40
- IBM SQUOZE
Vidare läsning
- Cowlishaw, Michael Frederic (2003-02-25) [2002-05-20, 2001-01-27]. Skrivet på Coventry, Storbritannien. "Decimal till binär kodare/avkodare" (amerikanskt patent). Armonk, New York, USA: International Business Machines Corporation (IBM). US6525679B1 . Hämtad 2018-07-18 [1] och Cowlishaw, Michael Frederic (2007-11-07) [2004-01-14, 2002-08-14, 2001-09-24, 2001-01-27]. Skrivet i Winchester, Hampshire, Storbritannien. "Decimal till binär kodare/avkodare" (europeiskt patent). Armonk, New York, USA: International Business Machines Corporation (IBM). EP1231716A2 . Hämtad 2018-07-18 . [2] [3] [4] (OBS. Detta patent handlar om DPD.)
- Bonten, Jo HM (2009-10-06) [2006-10-05]. "Förpackad decimalkodning IEEE-754-2008" . Geldrop, Nederländerna. Arkiverad från originalet 2018-07-11 . Hämtad 2018-07-11 . (OBS. En äldre version finns här: Packed Decimal Encoding IEEE-754r .)
- Savard, John JG (2018) [2007]. "Chen-Ho-kodning och tätt packad decimal" . quadiblock . Arkiverad från originalet 2018-07-03 . Hämtad 2018-07-16 .