logo search
Лабораторна 4_1_семестр

3.7. Щільно упаковані десяткові числа.

Зменшити надлишковість коду та підвищити ефективність використання кодових комбінацій допомагає щільно упаковане десяткове кодування (Densely Packed Decimal, DPD). Таке кодування базується на доволі зручному співвідношенні між степенями двійки та десятки:

(4.11)

Це співвідношення означає, що для кодування 3-х десяткових розрядів з невеликим надлишком вистачає 10-ти двійкових розрядів. Дійсно для кодування чисел від 0 до 999 необхідно 1000 кодових комбінацій, а ще 24 виявляються "лишніми" і можуть бути використані з іншою метою (наприклад кодувати помилки обчислень).

Існує два основних способи кодування десяткових тріад двійковими декадами: кодування Chen-Ho та кодування Mike Cowlishaw. Останнє називається щільно-упакованим десятковим кодуванням (надалі DPD). Стандарт ІЕЕЕ754-2008 використовує саме цей тип кодування, тому розглянемо його детальніше.

Щільно упаковані десяткові числа будуються на основі звичайних двійково-десяткових кодів.

Десяткову тріаду кодують звичайним двійково-десятковим кодом, замінюючи кожну десяткову цифру відповідною їй двійковою тетрадою. Таким чином отримуємо 12-розрядний двійково-десятковий код. Далі використовується та властивість двійково-десяткового кодування, що цифри від 0 до 7 включно (так звані малі цифри) мають старший біт, що дорівнює нулю:

0 - 0000, 4 - 0100,

1 - 0001, 5 - 0101,

2 - 0010, 6 - 0110,

3 - 0011, 7 - 0111.

Отже, якщо старший біт рівний нулю, то число 0abc2 відповідає десятковій цифрі згідно виразу: a×4 + b×2 + c.

Цифри 8 та 9 (так звані великі цифри) кодуються тетрадами, в яких старший біт рівний 1, а два наступні біти рівні нулю і тільки наймолодший біт визначає значення цифри:

8 - 1000, 9 - 1001.

Звідси число 100с2 відповідає десятковій цифрі, яка обчислюється згідно виразу: 8 + с. Таким чином, якщо старший біт тетради рівний 1, то значення двох наступних розрядів не використовується для кодування цієї десяткової цифри, тому розряди можна використати для кодування інших десяткових цифр. Таблиця 4.3. демонструє, яким чином 12-розрядний двійково-десятковий код записується за допомогою 10-ти двійкових розрядів. Таке кодування та розкодовування легко здійснити за допомогою електронних схем чи програмним способом.

Щільно упаковані десяткові числа (DPD)

Двійково-десяткові числа

b9

b8

b7

b6

b5

b4

b3

b2

b1

b0

d2

d1

d0

Значення десяткових цифр

Опис

a

b

c

d

e

f

0

g

h

i

0abc

0def

0ghi

(0–7) (0–7) (0–7)

три малі цифри

a

b

c

d

e

f

1

0

0

i

0abc

0def

100i

(0–7) (0–7) (8–9)

дві малі цифри, одна велика

a

b

c

g

h

f

1

0

1

i

0abc

100f

0ghi

(0–7) (8–9) (0–7)

g

h

c

d

e

f

1

1

0

i

100c

0def

0ghi

(8–9) (0–7) (0–7)

a

b

c

1

0

f

1

1

1

i

0abc

100f

100i

(0–7) (8–9) (8–9)

одна мала цифра, дві великі

d

e

c

0

1

f

1

1

1

i

100c

0def

100i

(8–9) (0–7) (8–9)

g

h

c

0

0

f

1

1

1

i

100c

100f

0ghi

(8–9) (8–9) (0–7)

x

x

c

1

1

f

1

1

1

i

100c

100f

100i

(8–9) (8–9) (8–9)

три великі цифри

Таблиця 4.3. Правила кодування щільно упакованих десяткових чисел (DPD).

Над щільно упакованими десятковими числами арифметичні дії не можна здійснювати звичайним способом. Тому такі числа перекодовують в двійково-десятковий код, в цьому коді здійснюються арифметичні дії, а результат знову перекодовують в щільно упакований код.

В останньому рядку таблиці біти b9 та b8 можуть набувати різних значень, однак їх вибирають такими, що дорівнюють нулю. Всі можливі комбінації бітів за умови, що біти b6, b5, b3, b2, b1 рівні 1, а хоча б один із бітів b9 та b8 не рівний нулю (всього 24 такі комбінації) можуть використовуватись для додаткового кодування певних ознак чисел, чи результатів арифметичних дій.

Такі складні перетворення бітів на практиці вже досить легко реалізуються за допомогою електронних схем, які одночасно забезпечують також і високу швидкодію.

Надлишковість щільно упакованих десяткових чисел складає:

, (4.12)

а ефективність використання кодових комбінацій

, (4.13)

де p - кількість десяткових тріад в записі десяткового числа.

Для p =1 (k =3) ефективність становить 97,66%, а для p =2 (k =6) - 95,37% (порівняйте з 24,4% та 6% відповідно, для двійково-десяткового кодування; Табл.4.3).

Таким чином щільно упаковані десяткові числа мають низьку надлишковість кодування та високу ефективність використання кодових комбінацій, що в поєднанні з доволі простими правилами переведення з десяткової системи числення в щільно упакований десятковий код та навпаки, дає переваги над звичайним двійковим кодуванням. Недоліком щільно упакованих двійкових кодів є досить складний спосіб виконання арифметичних дій над таким чином закодованими числами, однак сучасні апаратні (схемотехнічні) та програмні засоби ефективно вирішують цю проблему.