Chen-Ho-kodning

Chen-Ho-kodning är ett minneseffektivt alternativt system med binär kodning för 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 .

Kodningen minskar lagringskraven för två decimalsiffror (100 tillstånd) från 8 till 7 bitar, och de för tre decimalsiffror (1000 tillstånd) från 12 till 10 bitar genom att endast använda enkla booleska transformationer och undvika komplexa aritmetiska operationer som en baskonvertering .

Historia

I vad som verkar ha varit en multipel upptäckt utvecklades några av koncepten bakom vad som senare blev känt som Chen-Ho-kodning oberoende av Theodore M. Hertz 1969 och av Tien Chi Chen ( 陳天機 ) (1928–) 1971.

Hertz från Rockwell lämnade in ett patent för sin kodning 1969, vilket beviljades 1971.

Chen diskuterade först sina idéer med Irving Tze Ho ( 何宜慈 ) (1921–2003) 1971. Chen och Ho arbetade båda för IBM vid den tiden, om än på olika platser. Chen rådfrågade också Frank Chin Tung för att självständigt verifiera resultaten av hans teorier. IBM lämnade in ett patent i deras namn 1973, vilket beviljades 1974. Åtminstone 1973 måste Hertz tidigare arbete ha varit känt för dem, eftersom patentet citerar hans patent som känd teknik .

Med input från Joseph D. Rutledge och John C. McPherson cirkulerades den slutliga versionen av Chen-Ho-kodningen inom IBM 1974 och publicerades 1975 i tidskriften Communications of the ACM . Denna version innehöll flera förbättringar, främst relaterade till tillämpningen av kodningssystemet. Den utgör en Huffman -liknande prefixkod .

Kodningen kallades Chen och Ho's system 1975, Chens kodning 1982 och blev känd som Chen-Ho-kodning eller Chen-Ho-algoritm sedan 2000. Efter att ha lämnat in ett patent för det 2001 publicerade Michael F. Cowlishaw ytterligare en förfining av Chen-Ho-kodning känd som tätt packad decimalkodning (DPD) i IEE Proceedings – Computers and Digital Techniques 2002. DPD har därefter antagits som den decimalkodning som används i IEEE 754-2008 och ISO/IEC/IEC/IE9EE: 60555 2011 flyttalsstandarder .

Ansökan

Chen noterade att siffrorna noll till sju helt enkelt kodades med tre binära siffror i motsvarande oktala grupp. Han postulerade också att man kunde använda en flagga för att identifiera en annan kodning för siffrorna åtta och nio, som skulle kodas med en enda bit.

appliceras en serie booleska transformationer på strömmen av inmatade bitar, som komprimerar BCD-kodade siffror från 12 bitar per tre siffror till 10 bitar per tre siffror. Omvända transformationer används för att avkoda den resulterande kodade strömmen till BCD. Likvärdiga resultat kan också uppnås genom att använda en uppslagstabell .

Chen-Ho-kodning är begränsad till att koda uppsättningar med tre decimalsiffror i grupper om 10 bitar (så kallade dekleter ). Av de 1024 tillstånd som är möjliga genom att använda 10 bitar, lämnar det endast 24 tillstånd oanvända (med don't care -bitar som vanligtvis är inställda på 0 vid skrivning och ignoreras vid läsning). Med endast 0,34 % slöseri ger den en 20 % effektivare kodning än BCD med en siffra i 4 bitar.

Både Hertz och Chen föreslog också liknande, men mindre effektiva, kodningsscheman för att komprimera uppsättningar med två decimalsiffror (kräver 8 bitar i BCD) till grupper om 7 bitar.

Större uppsättningar av decimalsiffror kan delas in i tre- och tvåsiffriga grupper.

Patenten diskuterar också möjligheten att anpassa schemat till siffror kodade i andra decimalkoder än 8-4-2-1 BCD , som excess-3 , Excess-6 , Jump-at-2 , Jump-at-8 , Gray , Glixon , O'Brien typ-I och Gray–Stibitz-kod . Samma principer skulle också kunna tillämpas på andra baser.

1973 tycks någon form av Chen-Ho-kodning ha använts i adresskonverteringshårdvaran för den valfria IBM 7070 / 7074 -emuleringsfunktionen för IBM System/370 Model 165 och 370 Model 168- datorer.

En framträdande applikation använder ett 128-bitars register för att lagra 33 decimalsiffror med en tresiffrig exponent, i praktiken inte mindre än vad som kunde uppnås med binär kodning (medan BCD-kodning skulle behöva 144 bitar för att lagra samma antal siffror).

Kodningar för två decimalsiffror

Hertz-kodning

Hertz decimaldatakodning för en enda heptad (1969-formulär)
Binär kodning Decimalsiffror
Kodutrymme (128 stater) b6 b5 b4 b3 b2 b1 b0 d1 d0 Värden kodade Beskrivning Förekomster (100 tillstånd)
50 % (64 delstater) 0 a b c d e f 0abc 0def (0–7) (0–7) Två lägre siffror 64 % (64 delstater)
12,5 % (16 delstater) 1 1 0 c d e f 100 c 0def (8–9) (0–7)
En lägre siffra, en högre siffra
16 % (16 delstater)
12,5 % (16 delstater) 1 0 1 f a b c 0abc 100 f (0–7) (8–9) 16 % (16 delstater)
12,5 % (16 delstater, 4 använda) 1 1 1 c x x f 100 c 100 f (8–9) (8–9) Två högre siffror 4 % (4 delstater)
12,5 % (16 delstater, 0 använt) 1 0 0 x x x x 0 % (0 stater)

Tidig Chen-Ho-kodning, metod A

Decimaldatakodning för en enda heptad (tidig 1971-form, metod A)
Binär kodning Decimalsiffror
Kodutrymme (128 stater) b6 b5 b4 b3 b2 b1 b0 d1 d0 Värden kodade Beskrivning Förekomster (100 tillstånd)
50 % (64 delstater) 0 a b c d e f 0abc 0def (0–7) (0–7) Två lägre siffror 64 % (64 delstater)
25 % (32 delstater, 16 använda) 1 0 x (b) c d e f 100 c 0def (8–9) (0–7)
En lägre siffra, en högre siffra
16 % (16 delstater)
12,5 % (16 delstater) 1 1 0 f a b c 0abc 100 f (0–7) (8–9) 16 % (16 delstater)
12,5 % (16 stater, 4 använda) 1 1 1 c x (a) x (b) f 100 c 100 f (8–9) (8–9) Två högre siffror 4 % (4 delstater)
  • Denna kodning är inte paritetsbevarande.

Tidig Chen-Ho-kodning, metod B

Decimaldatakodning för en enda heptad (tidig 1971-form, metod B)
Binär kodning Decimalsiffror
Kodutrymme (128 stater) b6 b5 b4 b3 b2 b1 b0 d1 d0 Värden kodade Beskrivning Förekomster (100 tillstånd)
50 % (64 delstater) 0 a b c d e f 0abc 0def (0–7) (0–7) Två lägre siffror 64 % (64 delstater)
12,5 % (16 delstater) 1 0 c 0 d e f 100 c 0def (8–9) (0–7)
En lägre siffra, en högre siffra
16 % (16 delstater)
12,5 % (16 stater, 4 använda) 1 0 c 1 x x f 100 c 100 f (8–9) (8–9) Två högre siffror 4 % (4 delstater)
12,5 % (16 delstater) 1 1 f 0 a b c 0abc 100 f (0–7) (8–9)
En lägre siffra, en högre siffra
16 % (16 delstater)
12,5 % (16 delstater, 0 använt) 1 1 x 1 x x x 0 % (0 stater)
  • Denna kodning är inte paritetsbevarande.

Patenterad och slutlig Chen-Ho-kodning

Decimaldatakodning för en enda heptad (patenterat 1973-formulär och slutgiltigt 1975-formulär)
Binär kodning Decimalsiffror
Kodutrymme (128 stater) b6 b5 b4 b3 b2 b1 b0 d1 d0 Värden kodade Beskrivning Förekomster (100 tillstånd)
50 % (64 delstater) 0 a b c d e f 0abc 0def (0–7) (0–7) Två lägre siffror 64 % (64 delstater)
25,0 % (32 delstater, 16 använda) 1 0 x (b) c d e f 100 c 0def (8–9) (0–7)
En lägre siffra, en högre siffra
16 % (16 delstater)
12,5 % (16 delstater) 1 1 1 c a b f 0abc 100 f (0–7) (8–9) 16 % (16 delstater)
12,5 % (16 stater, 4 använda) 1 1 0 c x (a) x (b) f 100 c 100 f (8–9) (8–9) Två högre siffror 4 % (4 delstater)

Kodningar för tre decimalsiffror

Hertz-kodning

Hertz-decimaldatakodning för en enda deklet (1969-formulär)
Binär kodning 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) 0 a b c d e f g h i 0abc 0def 0ghi (0–7) (0–7) (0–7) Tre lägre siffror 51,2 % (512 delstater)
37,5 % (384 delstater) 1 0 0 c d e f g h i 100 c 0def 0ghi (8–9) (0–7) (0–7)
Två lägre siffror, en högre siffra
38,4 % (384 delstater)
1 0 1 f a b c g h i 0abc 100 f 0ghi (0–7) (8–9) (0–7)
1 1 0 i a b c d e f 0abc 0def 100 i (0–7) (0–7) (8–9)
9,375 % (96 delstater) 1 1 1 f 0 0 i a b c 0abc 100 f 100 i (0–7) (8–9) (8–9)
En lägre siffra, två högre siffror
9,6 % (96 delstater)
1 1 1 c 0 1 i d e f 100 c 0def 100 i (8–9) (0–7) (8–9)
1 1 1 c 1 0 f g h i 100 c 100 f 0ghi (8–9) (8–9) (0–7)
3,125 % (32 delstater, 8 använda) 1 1 1 c 1 1 f 0 ( ) 0 ( ) i 100 c 100 f 100 i (8–9) (8–9) (8–9) Tre högre siffror, bitarna b2 och b1 bryr sig inte 0,8 % (8 delstater)
  • Denna kodning är inte paritetsbevarande.

Tidig Chen-Ho-kodning

Decimaldatakodning för en enda declet (tidig 1971-form)
Binär kodning 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) 0 a b c d e f g h i 0abc 0def 0ghi (0–7) (0–7) (0–7) Tre lägre siffror 51,2 % (512 delstater)
37,5 % (384 delstater) 1 0 0 c d e f g h i 100 c 0def 0ghi (8–9) (0–7) (0–7)
Två lägre siffror, en högre siffra
38,4 % (384 delstater)
1 0 1 f g h i a b c 0abc 100 f 0ghi (0–7) (8–9) (0–7)
1 1 0 i a b c d e f 0abc 0def 100 i (0–7) (0–7) (8–9)
9,375 % (96 delstater) 1 1 1 0 0 f i a b c 0abc 100 f 100 i (0–7) (8–9) (8–9)
En lägre siffra, två högre siffror
9,6 % (96 delstater)
1 1 1 0 1 i c d e f 100 c 0def 100 i (8–9) (0–7) (8–9)
1 1 1 1 0 c f g h i 100 c 100 f 0ghi (8–9) (8–9) (0–7)
3,125 % (32 delstater, 8 använda) 1 1 1 1 1 c f i 0 ( ) 0 ( ) 100 c 100 f 100 i (8–9) (8–9) (8–9) Tre högre siffror, bitarna b1 och b0 bryr sig inte 0,8 % (8 delstater)
  • Denna kodning är inte paritetsbevarande.

Patenterad Chen-Ho-kodning

Decimaldatakodning för en enda declet (patenterad 1973-formulär)
Binär kodning 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) 0 a b d e g h c f i 0abc 0def 0ghi (0–7) (0–7) (0–7) Tre lägre siffror 51,2 % (512 delstater)
37,5 % (384 delstater) 1 0 0 d e g h c f i 100 c 0def 0ghi (8–9) (0–7) (0–7)
Två lägre siffror, en högre siffra
38,4 % (384 delstater)
1 0 1 a b g h c f i 0abc 100 f 0ghi (0–7) (8–9) (0–7)
1 1 0 d e a b c f i 0abc 0def 100 i (0–7) (0–7) (8–9)
9,375 % (96 delstater) 1 1 1 1 0 a b c f i 0abc 100 f 100 i (0–7) (8–9) (8–9)
En lägre siffra, två högre siffror
9,6 % (96 delstater)
1 1 1 0 1 d e c f i 100 c 0def 100 i (8–9) (0–7) (8–9)
1 1 1 0 0 g h c f i 100 c 100 f 0ghi (8–9) (8–9) (0–7)
3,125 % (32 delstater, 8 använda) 1 1 1 1 1 0 ( ) 0 ( ) c f i 100 c 100 f 100 i (8–9) (8–9) (8–9) Tre högre siffror, bitarna b4 och b3 bryr sig inte 0,8 % (8 delstater)
  • Denna kodning är inte paritetsbevarande.

Slutlig Chen-Ho-kodning

Chen-Ho decimaldatakodning för en enda deklet (slutlig 1975-formulär)
Binär kodning 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) 0 a b c d e f g h i 0abc 0def 0ghi (0–7) (0–7) (0–7) Tre lägre siffror 51,2 % (512 delstater)
37,5 % (384 delstater) 1 0 0 c d e f g h i 100 c 0def 0ghi (8–9) (0–7) (0–7)
Två lägre siffror, en högre siffra
38,4 % (384 delstater)
1 0 1 c a b f g h i 0abc 100 f 0ghi (0–7) (8–9) (0–7)
1 1 0 c d e f a b i 0abc 0def 100 i (0–7) (0–7) (8–9)
9,375 % (96 delstater) 1 1 1 c 0 0 f a b i 0abc 100 f 100 i (0–7) (8–9) (8–9)
En lägre siffra, två högre siffror
9,6 % (96 delstater)
1 1 1 c 0 1 f d e i 100 c 0def 100 i (8–9) (0–7) (8–9)
1 1 1 c 1 0 f g h i 100 c 100 f 0ghi (8–9) (8–9) (0–7)
3,125 % (32 delstater, 8 använda) 1 1 1 c 1 1 f 0 ( ) 0 ( ) i 100 c 100 f 100 i (8–9) (8–9) (8–9) Tre högre siffror, bitarna b2 och b1 bryr sig inte 0,8 % (8 delstater)
  • Denna kodning är inte paritetsbevarande.

Förvaringseffektivitet

Förvaringseffektivitet
BCD Nödvändiga bitar Lite skillnad
Siffror stater Bits Binärt kodutrymme Binär kodning [A] 2-siffrig kodning [B] 3-siffrig kodning [C] Blandad kodning Blandat kontra binärt Blandat vs. BCD
1 10 4 16 4 (7) (10) 4 [1×A] 0 0
2 100 8 128 7 7 (10) 7 [1×B] 0 −1
3 1000 12 1024 10 (14) 10 10 [1×C] 0 −2
4 10 000 16 16 384 14 14 (20) 14 [2×B] 0 −2
5 100 000 20 131 072 17 (21) (20) 17 [1×C+1×B] 0 −3
6 1 000 000 24 1 048 576 20 21 20 20 [2×C] 0 −4
7 10 000 000 28 16 777 216 24 (28) (30) 24 [2×C+1×A] 0 −4
8 100 000 000 32 134 217 728 27 28 (30) 27 [2×C+1×B] 0 −5
9 1  000  000  000 36 1 073 741 824 30 (35) 30 30 [3×C] 0 −6
10 10 000 000 000 40 17 179 869 184 34 35 (40) 34 [3×C+1×A] 0 −6
11 100 000 000 000 44 137 438 953 472 37 (42) (40) 37 [3×C+1×B] 0 −7
12 1  000  000  000  000 48 1 099 511 627 776 40 42 40 40 [4×C] 0 −8
13 10 000 000 000 000 52 17 592 186 044 416 44 (49) (50) 44 [4×C+1×A] 0 −8
14 100 000 000 000 000 56 140 737 488 355 328 47 49 (50) 47 [4×C+1×B] 0 −9
15 1  000  000  000  000  000 60 1 125 899 906 842 624 50 (56) 50 50 [5×C] 0 −10
16 10 000 000 000 000 000 64 18 014 398 509 481 984 54 56 (60) 54 [5×C+1×A] 0 −10
17 100 000 000 000 000 000 68 144 115 188 075 855 872 57 (63) (60) 57 [5×C+1×B] 0 −11
18 1 000 000 000 000 000 000 72 1 152 921 504 606 846 976 60 63 60 60 [6×C] 0 −12
19 10 000 000 000 000 000 000 76 18 446 744 073 709 551 616 64 (70) (70) 64 [6×C+1×A] 0 −12
20 80 67 70 (70) 67 [6×C+1×B] 0 −13
21 84 70 (77) 70 70 [7×C] 0 −14
22 88 74 77 (80) 74 [7×C+1×A] 0 −14
23 92 77 (84) (80) 77 [7×C+1×B] 0 −15
24 96 80 84 80 80 [8×C] 0 −16
25 100 84 (91) (90) 84 [8×C+1×A] 0 −16
26 104 87 91 (90) 87 [8×C+1×B] 0 −17
27 108 90 (98) 90 90 [9×C] 0 −18
28 112 94 98 (100) 94 [9×C+1×A] 0 −18
29 116 97 (105) (100) 97 [9×C+1×B] 0 −19
30 120 100 105 100 100 [10×C] 0 −20
31 124 103 (112) (110) 104 [10×C+1×A] +1 −20
32 128 107 112 (110) 107 [10×C+1×B] 0 −21
33 132 110 (119) 110 110 [11×C] 0 −22
34 136 113 119 (120) 114 [11×C+1×A] +1 −22
35 140 117 (126) (120) 117 [11×C+1×B] 0 −23
36 144 120 126 120 120 [12×C] 0 −24
37 148 123 (133) (130) 124 [12×C+1×A] +1 −24
38 152 127 133 (130) 127 [12×C+1×B] 0 −25

Se även

Anteckningar

Vidare läsning