Kodowanie Chen-Ho

Kodowanie Chen – Ho to oszczędzający pamięć alternatywny system kodowania binarnego cyfr dziesiętnych .

Tradycyjny system binarnego kodowania cyfr dziesiętnych, znany jako kodowanie binarne dziesiętne (BCD), wykorzystuje cztery bity do zakodowania każdej cyfry, co powoduje znaczne marnotrawstwo przepustowości danych binarnych (ponieważ cztery bity mogą przechowywać 16 stanów i są używane do przechowywania tylko 10), nawet przy użyciu spakowanego BCD .

Kodowanie zmniejsza wymagania dotyczące przechowywania dwóch cyfr dziesiętnych (100 stanów) z 8 do 7 bitów i trzech cyfr dziesiętnych (1000 stanów) z 12 do 10 bitów przy użyciu tylko prostych transformacji boolowskich, unikając skomplikowanych operacji arytmetycznych, takich jak konwersja bazowa .

Historia

W czymś, co wydaje się być wielokrotnym odkryciem , niektóre koncepcje kryjące się za tym, co później stało się znane jako kodowanie Chen – Ho, zostały niezależnie opracowane przez Theodore'a M. Hertza w 1969 r. I Tien Chi Chen ( 陳 天 機 ) (1928–) w 1971 r.

Hertz z Rockwell złożył patent na swoje kodowanie w 1969 roku, który został przyznany w 1971 roku.

Chen po raz pierwszy omówił swoje pomysły z Irvingiem Tze Ho ( 何宜 慈 ) (1921–2003) w 1971 r. Chen i Ho pracowali wówczas dla IBM , choć w różnych lokalizacjach. Chen konsultował się również z Frankiem Chin Tungiem, aby niezależnie zweryfikować wyniki swoich teorii. IBM złożył patent w ich imieniu w 1973 roku, który został przyznany w 1974 roku. Przynajmniej do 1973 roku wcześniejsze prace Hertza musiały być im znane, ponieważ patent cytuje jego patent jako stan techniki .

Dzięki wkładowi Josepha D. Rutledge'a i Johna C. McPhersona ostateczna wersja kodowania Chen – Ho została rozesłana w IBM w 1974 roku i opublikowana w 1975 roku w czasopiśmie Communications of the ACM . Ta wersja zawierała kilka udoskonaleń, głównie związanych z zastosowaniem systemu kodowania. Stanowi kod prefiksu podobny do Huffmana .

Kodowanie było określane jako schemat Chena i Ho w 1975 r., Kodowanie Chena w 1982 r. I stało się znane jako kodowanie Chen – Ho lub algorytm Chen – Ho od 2000 r. Po złożeniu na nie patentu w 2001 r. Michael F. Cowlishaw opublikował kolejny udoskonalenie kodowania Chen – Ho, znanego jako gęsto upakowane kodowanie dziesiętne (DPD) w IEE Proceedings - Computers and Digital Techniques w 2002 r. DPD zostało następnie przyjęte jako kodowanie dziesiętne używane w IEEE 754-2008 i ISO / IEC / IEEE 60559: Standardy zmiennoprzecinkowe 2011 .

Aplikacja

Chen zauważył, że cyfry od zera do siedmiu zostały po prostu zakodowane przy użyciu trzech cyfr binarnych odpowiedniej grupy ósemkowej . Postulował również, że można użyć flagi do zidentyfikowania innego kodowania cyfr ósmej i dziewiątej, które byłyby zakodowane przy użyciu jednego bitu.

do strumienia bitów wejściowych stosuje się serię transformacji boolowskich , kompresując cyfry zakodowane w formacie BCD z 12 bitów na trzy cyfry do 10 bitów na trzy cyfry. Odwrócone transformacje są używane do dekodowania wynikowego zakodowanego strumienia do BCD. Równoważne wyniki można również osiągnąć za pomocą tabeli przeglądowej .

Kodowanie Chen-Ho ogranicza się do kodowania zestawów trzech cyfr dziesiętnych w grupy po 10 bitów (tzw. declety ). Spośród 1024 stanów możliwych przy użyciu 10 bitów, pozostawia tylko 24 stany nieużywane (z obojętnymi zwykle ustawionymi na 0 przy zapisie i ignorowanymi przy odczycie). Przy zaledwie 0,34% marnotrawstwa daje o 20% wydajniejsze kodowanie niż BCD z jedną cyfrą w 4 bitach.

Zarówno Hertz, jak i Chen zaproponowali również podobne, ale mniej wydajne schematy kodowania do kompresji zestawów dwóch cyfr dziesiętnych (wymagających 8 bitów w kodzie BCD) w grupy po 7 bitów.

Większe zestawy cyfr dziesiętnych można podzielić na grupy trzy- i dwucyfrowe.

Patenty omawiają również możliwość dostosowania schematu do cyfr zakodowanych w dowolnych innych kodach dziesiętnych niż 8-4-2-1 BCD , jak np. Excess-3 , Excess-6 , Jump-at-2 , Jump-at-8 , Kod Graya , Glixona , O'Briena typu I i Graya-Stibitza . Te same zasady można zastosować również do innych baz.

Wydaje się, że w 1973 r. Pewna forma kodowania Chen – Ho została wykorzystana w sprzęcie do konwersji adresów opcjonalnej funkcji emulacji IBM 7070/7074 dla komputerów IBM System / 370 Model 165 i 370 Model 168 .

Jedna z czołowych aplikacji wykorzystuje 128-bitowy rejestr do przechowywania 33 cyfr dziesiętnych z trzycyfrowym wykładnikiem, w rzeczywistości nie mniej niż to, co można osiągnąć przy użyciu kodowania binarnego (podczas gdy kodowanie BCD wymagałoby 144 bitów do przechowywania tej samej liczby cyfr).

Kodowanie dla dwóch cyfr dziesiętnych

kodowanie Hertza

Kodowanie danych dziesiętnych Hertza dla pojedynczego heptady (formularz z 1969 r.)
Kodowanie binarne Cyfry dziesiętne
Przestrzeń kodu (128 stanów) b6 b5 b4 b3 b2 b1 b0 d1 d0 Zakodowane wartości Opis Zdarzenia (100 stanów)
50% (64 stany) 0 A B C D mi F 0ABC 0pok (0–7) (0–7) Dwie dolne cyfry 64% (64 stany)
12,5% (16 stanów) 1 1 0 C D mi F 100 c 0pok (8–9) (0–7)
Jedna niższa cyfra, jedna wyższa cyfra
16% (16 stanów)
12,5% (16 stanów) 1 0 1 F A B C 0ABC 100 ż (0–7) (8–9) 16% (16 stanów)
12,5% (16 stanów, 4 używane) 1 1 1 C X X F 100 c 100 ż (8–9) (8–9) Dwie wyższe cyfry 4% (4 stany)
12,5% (16 stanów, 0 używanych) 1 0 0 X X X X 0% (0 stanów)

Wczesne kodowanie Chen – Ho, metoda A

Kodowanie danych dziesiętnych dla pojedynczego heptady (formularz z początku 1971 r., Metoda A)
Kodowanie binarne Cyfry dziesiętne
Przestrzeń kodu (128 stanów) b6 b5 b4 b3 b2 b1 b0 d1 d0 Zakodowane wartości Opis Zdarzenia (100 stanów)
50% (64 stany) 0 A B C D mi F 0ABC 0pok (0–7) (0–7) Dwie dolne cyfry 64% (64 stany)
25% (32 stany, 16 używanych) 1 0 x (b) C D mi F 100 c 0pok (8–9) (0–7)
Jedna niższa cyfra, jedna wyższa cyfra
16% (16 stanów)
12,5% (16 stanów) 1 1 0 F A B C 0ABC 100 ż (0–7) (8–9) 16% (16 stanów)
12,5% (16 stanów, 4 używane) 1 1 1 C x (a) x (b) F 100 c 100 ż (8–9) (8–9) Dwie wyższe cyfry 4% (4 stany)
  • To kodowanie nie zachowuje parzystości.

Wczesne kodowanie Chen – Ho, metoda B

Kodowanie danych dziesiętnych dla pojedynczego heptada (formularz z początku 1971 r., Metoda B)
Kodowanie binarne Cyfry dziesiętne
Przestrzeń kodu (128 stanów) b6 b5 b4 b3 b2 b1 b0 d1 d0 Zakodowane wartości Opis Zdarzenia (100 stanów)
50% (64 stany) 0 A B C D mi F 0ABC 0pok (0–7) (0–7) Dwie dolne cyfry 64% (64 stany)
12,5% (16 stanów) 1 0 C 0 D mi F 100 c 0pok (8–9) (0–7)
Jedna niższa cyfra, jedna wyższa cyfra
16% (16 stanów)
12,5% (16 stanów, 4 używane) 1 0 C 1 X X F 100 c 100 ż (8–9) (8–9) Dwie wyższe cyfry 4% (4 stany)
12,5% (16 stanów) 1 1 F 0 A B C 0ABC 100 ż (0–7) (8–9)
Jedna niższa cyfra, jedna wyższa cyfra
16% (16 stanów)
12,5% (16 stanów, 0 używanych) 1 1 X 1 X X X 0% (0 stanów)
  • To kodowanie nie zachowuje parzystości.

Opatentowane i ostateczne kodowanie Chen – Ho

Kodowanie danych dziesiętnych dla pojedynczego heptady (opatentowany formularz z 1973 r. I ostateczny formularz z 1975 r.)
Kodowanie binarne Cyfry dziesiętne
Przestrzeń kodu (128 stanów) b6 b5 b4 b3 b2 b1 b0 d1 d0 Zakodowane wartości Opis Zdarzenia (100 stanów)
50% (64 stany) 0 A B C D mi F 0ABC 0pok (0–7) (0–7) Dwie dolne cyfry 64% (64 stany)
25,0% (32 stany, 16 używanych) 1 0 x (b) C D mi F 100 c 0pok (8–9) (0–7)
Jedna niższa cyfra, jedna wyższa cyfra
16% (16 stanów)
12,5% (16 stanów) 1 1 1 C A B F 0ABC 100 ż (0–7) (8–9) 16% (16 stanów)
12,5% (16 stanów, 4 używane) 1 1 0 C x (a) x (b) F 100 c 100 ż (8–9) (8–9) Dwie wyższe cyfry 4% (4 stany)

Kodowanie trzech cyfr dziesiętnych

kodowanie Hertza

Kodowanie danych dziesiętnych Hertza dla pojedynczego dekleta (formularz z 1969 r.)
Kodowanie binarne Cyfry dziesiętne
Przestrzeń kodowa (1024 stany) b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Zakodowane wartości Opis Zdarzenia (1000 stanów)
50,0% (512 stanów) 0 A B C D mi F G H I 0ABC 0pok 0ghi (0–7) (0–7) (0–7) Trzy dolne cyfry 51,2% (512 stanów)
37,5% (384 stany) 1 0 0 C D mi F G H I 100 c 0pok 0ghi (8–9) (0–7) (0–7)
Dwie niższe cyfry, jedna wyższa cyfra
38,4% (384 stany)
1 0 1 F A B C G H I 0ABC 100 ż 0ghi (0–7) (8–9) (0–7)
1 1 0 I A B C D mi F 0ABC 0pok 100 I (0–7) (0–7) (8–9)
9,375% (96 stanów) 1 1 1 F 0 0 I A B C 0ABC 100 ż 100 I (0–7) (8–9) (8–9)
Jedna niższa cyfra, dwie wyższe cyfry
9,6% (96 stanów)
1 1 1 C 0 1 I D mi F 100 c 0pok 100 I (8–9) (0–7) (8–9)
1 1 1 C 1 0 F G H I 100 c 100 ż 0ghi (8–9) (8–9) (0–7)
3,125% (32 stany, 8 używanych) 1 1 1 C 1 1 F 0 ( ) 0 ( ) I 100 c 100 ż 100 I (8–9) (8–9) (8–9) Trzy wyższe cyfry, bity b2 i b1 są obojętne 0,8% (8 stanów)
  • To kodowanie nie zachowuje parzystości.

Wczesne kodowanie Chen – Ho

Kodowanie danych dziesiętnych dla pojedynczego decleta (formularz z początku 1971 r.)
Kodowanie binarne Cyfry dziesiętne
Przestrzeń kodowa (1024 stany) b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Zakodowane wartości Opis Zdarzenia (1000 stanów)
50,0% (512 stanów) 0 A B C D mi F G H I 0ABC 0pok 0ghi (0–7) (0–7) (0–7) Trzy dolne cyfry 51,2% (512 stanów)
37,5% (384 stany) 1 0 0 C D mi F G H I 100 c 0pok 0ghi (8–9) (0–7) (0–7)
Dwie niższe cyfry, jedna wyższa cyfra
38,4% (384 stany)
1 0 1 F G H I A B C 0ABC 100 ż 0ghi (0–7) (8–9) (0–7)
1 1 0 I A B C D mi F 0ABC 0pok 100 I (0–7) (0–7) (8–9)
9,375% (96 stanów) 1 1 1 0 0 F I A B C 0ABC 100 ż 100 I (0–7) (8–9) (8–9)
Jedna niższa cyfra, dwie wyższe cyfry
9,6% (96 stanów)
1 1 1 0 1 I C D mi F 100 c 0pok 100 I (8–9) (0–7) (8–9)
1 1 1 1 0 C F G H I 100 c 100 ż 0ghi (8–9) (8–9) (0–7)
3,125% (32 stany, 8 używanych) 1 1 1 1 1 C F I 0 ( ) 0 ( ) 100 c 100 ż 100 I (8–9) (8–9) (8–9) Trzy wyższe cyfry, bity b1 i b0 są obojętne 0,8% (8 stanów)
  • To kodowanie nie zachowuje parzystości.

Opatentowane kodowanie Chen – Ho

Kodowanie danych dziesiętnych dla pojedynczego decleta (opatentowany formularz z 1973 r.)
Kodowanie binarne Cyfry dziesiętne
Przestrzeń kodowa (1024 stany) b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Zakodowane wartości Opis Zdarzenia (1000 stanów)
50,0% (512 stanów) 0 A B D mi G H C F I 0ABC 0pok 0ghi (0–7) (0–7) (0–7) Trzy dolne cyfry 51,2% (512 stanów)
37,5% (384 stany) 1 0 0 D mi G H C F I 100 c 0pok 0ghi (8–9) (0–7) (0–7)
Dwie niższe cyfry, jedna wyższa cyfra
38,4% (384 stany)
1 0 1 A B G H C F I 0ABC 100 ż 0ghi (0–7) (8–9) (0–7)
1 1 0 D mi A B C F I 0ABC 0pok 100 I (0–7) (0–7) (8–9)
9,375% (96 stanów) 1 1 1 1 0 A B C F I 0ABC 100 ż 100 I (0–7) (8–9) (8–9)
Jedna niższa cyfra, dwie wyższe cyfry
9,6% (96 stanów)
1 1 1 0 1 D mi C F I 100 c 0pok 100 I (8–9) (0–7) (8–9)
1 1 1 0 0 G H C F I 100 c 100 ż 0ghi (8–9) (8–9) (0–7)
3,125% (32 stany, 8 używanych) 1 1 1 1 1 0 ( ) 0 ( ) C F I 100 c 100 ż 100 I (8–9) (8–9) (8–9) Trzy wyższe cyfry, bity b4 i b3 nie mają znaczenia 0,8% (8 stanów)
  • To kodowanie nie zachowuje parzystości.

Ostateczne kodowanie Chen – Ho

Kodowanie danych dziesiętnych Chen-Ho dla pojedynczego decleta (ostateczna forma z 1975 r.)
Kodowanie binarne Cyfry dziesiętne
Przestrzeń kodowa (1024 stany) b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Zakodowane wartości Opis Zdarzenia (1000 stanów)
50,0% (512 stanów) 0 A B C D mi F G H I 0ABC 0pok 0ghi (0–7) (0–7) (0–7) Trzy dolne cyfry 51,2% (512 stanów)
37,5% (384 stany) 1 0 0 C D mi F G H I 100 c 0pok 0ghi (8–9) (0–7) (0–7)
Dwie niższe cyfry, jedna wyższa cyfra
38,4% (384 stany)
1 0 1 C A B F G H I 0ABC 100 ż 0ghi (0–7) (8–9) (0–7)
1 1 0 C D mi F A B I 0ABC 0pok 100 I (0–7) (0–7) (8–9)
9,375% (96 stanów) 1 1 1 C 0 0 F A B I 0ABC 100 ż 100 I (0–7) (8–9) (8–9)
Jedna niższa cyfra, dwie wyższe cyfry
9,6% (96 stanów)
1 1 1 C 0 1 F D mi I 100 c 0pok 100 I (8–9) (0–7) (8–9)
1 1 1 C 1 0 F G H I 100 c 100 ż 0ghi (8–9) (8–9) (0–7)
3,125% (32 stany, 8 używanych) 1 1 1 C 1 1 F 0 ( ) 0 ( ) I 100 c 100 ż 100 I (8–9) (8–9) (8–9) Trzy wyższe cyfry, bity b2 i b1 nie mają znaczenia 0,8% (8 stanów)
  • To kodowanie nie zachowuje parzystości.

Wydajność przechowywania

Wydajność przechowywania
BCD Niezbędne bity Różnica bitów
Cyfry Stany Bity Przestrzeń kodu binarnego Kodowanie binarne [A] kodowanie 2-cyfrowe [B] kodowanie 3-cyfrowe [C] Kodowanie mieszane Mieszane a binarne Mieszane kontra 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

Zobacz też

Notatki

Dalsza lektura