Плотно упакованная десятичная дробь - Densely packed decimal

Плотно упакованная десятичная дробь (DPD) - эффективный метод для двоичный кодирование десятичный цифры.

Традиционная система двоичного кодирования десятичных цифр, известная как двоично-десятичный (BCD), использует четыре бита для кодирования каждой цифры, что приводит к значительной потере пропускной способности двоичных данных (поскольку четыре бита могут хранить 16 состояний и используются для хранения только 10), даже при использовании упакованный BCD. Плотно упакованная десятичная дробь - это более эффективный код, который упаковывает три цифры в десять битов с использованием схемы, которая позволяет выполнять сжатие или расширение в BCD с помощью всего двух или трех аппаратные задержки ворот.[1]

Плотно упакованное десятичное кодирование - это усовершенствование Кодировка Чен – Хо; он дает те же преимущества сжатия и скорости, но особое расположение используемых бит дает дополнительные преимущества:

  • Сжатие одной или двух цифр (в оптимальные четыре или семь битов соответственно) достигается как подмножество трехзначного кодирования. Это означает, что можно эффективно кодировать произвольное количество десятичных цифр (а не только кратные трем цифрам). Например, 38 = 12 × 3 + 2 десятичных цифры могут быть закодированы в 12 × 10 + 7 = 127 бит, то есть 12 наборов из трех десятичных цифр могут быть закодированы с использованием 12 наборов из десяти двоичных битов и оставшихся двух десятичных цифр. может быть закодирован с использованием дополнительных семи двоичных битов.
  • Упомянутое выше подмножество кодирования - это просто крайние правые биты стандартного трехзначного кодирования; закодированное значение можно расширить, просто добавив начальные 0 битов.
  • Все семибитовые числа BCD (от 0 до 79) идентично кодируются DPD. Это делает преобразование обычных малых чисел тривиальным. (Это должно быть 80, потому что для этого требуется восемь бит для BCD, но указанное выше свойство требует, чтобы кодировка DPD умещалась в семь бит.)
  • Младший бит каждой цифры копируется без изменений. Таким образом, нетривиальную часть кодирования можно рассматривать как преобразование трех цифр с основанием 5 в семь двоичных разрядов. Далее по цифрам логические значения (в котором каждая цифра равна 0 или 1) может управляться напрямую без необходимости какого-либо кодирования или декодирования.

История

В 1969 г. Теодор М. Герц, а в 1971 г. Тьен Чи Чен (陳 天機) с Ирвинг Цзе Хо (何宜慈) придумал без потерь коды префиксов (именуемый Герц и Кодировки Чен – Хо[2]), который упаковывал три десятичных цифры в десять двоичных разрядов с использованием схемы, которая позволяла сжатие или расширение до BCD с аппаратными задержками только с двумя или тремя затворами. Плотно упакованная десятичная дробь - это ее усовершенствование, разработанное Майк Ф. Коулишоу в 2002,[1] который был включен в IEEE 754-2008[3] и ISO / IEC / IEEE 60559: 2011[4] стандарты для десятичных плавающая точка.

Кодирование

Как и кодирование Чен – Хо, кодирование DPD классифицирует каждую десятичную цифру в один из двух диапазонов в зависимости от самого старшего бита двоичной формы: «маленькие» цифры имеют значения от 0 до 7 (двоичные 0000–0111), а «большие» цифры , От 8 до 9 (двоичные 1000–1001). После того, как стало известно или было указано, что цифра мала, все еще требуются еще три бита для определения значения. Если указано большое значение, требуется только один бит, чтобы различать значения 8 и 9.

При кодировании старший бит каждой из трех кодируемых цифр выбирает один из восьми шаблонов кодирования для оставшихся битов в соответствии со следующей таблицей. В таблице показано, как при декодировании десять бит закодированной формы в столбцах b9 через b0 копируются в три цифры d2 через d0, а остальные биты заполняются постоянными нулями или единицами.

Плотно упакованные правила десятичного кодирования[5]
Кодированное значение DPDДесятичные цифры
Кодовое пространство (1024 состояния)b9b8b7b6b5b4b3Би 2b1b0d2d1d0Закодированные значенияОписаниеВхождения (1000 состояний)
50,0% (512 штатов)абcdеж0граммчася0abc0def0Гхи(0–7) (0–7) (0–7)Три маленькие цифры51,2% (512 штатов)
37,5% (384 государства)абcdеж100я0abc0def100я(0–7) (0–7) (8–9)Две маленькие цифры,
один большой
38,4% (384 государства)
абcграммчасж101я0abc100ж0Гхи(0–7) (8–9) (0–7)
граммчасcdеж110я100c0def0Гхи(8–9) (0–7) (0–7)
9,375% (96 штатов)граммчасc00ж111я100c100ж0Гхи(8–9) (8–9) (0–7)Одна маленькая цифра,
два больших
9,6% (96 штатов)
dеc01ж111я100c0def100я(8–9) (0–7) (8–9)
абc10ж111я0abc100ж100я(0–7) (8–9) (8–9)
3,125% (32 штата, 8 использовано)ИксИксc11ж111я100c100ж100я(8–9) (8–9) (8–9)Три большие цифры, биты b9 и b8 - это все равно0,8% (8 штатов)

Биты b7, b4 и b0 (c, ж и я) проходят через кодировку без изменений и не влияют на значение других битов. Остальные семь битов можно рассматривать как семибитное кодирование трех цифр с основанием 5.

Биты b8 и b9 не нужны и игнорируется при декодировании DPD-групп с тремя большими цифрами (помечены как «x» в последней строке таблицы выше), но при кодировании заполняются нулями.

Восемь десятичных значений, все цифры которых равны 8 или 9, имеют четыре кодировки каждое. Биты, отмеченные x в приведенной выше таблице, игнорируются при вводе, но всегда будут равны 0 в вычисленных результатах (8 × 3 = 24 нестандартных кодирования заполняют в промежутке между 103 = 1000 и 210 = 1024.)

Примеры

В этой таблице показаны некоторые репрезентативные десятичные числа и их кодировки в BCD, Chen – Ho и плотно упакованном десятичном формате (DPD):

ДесятичныйBCDЧен – ХоDPD
0050000 0000 0101000 000 0101000 000 0101
0090000 0000 1001110 000 0001000 000 1001
0550000 0101 0101000 010 1101000 101 0101
0790000 0111 1001110 011 1001000 111 1001
0800000 1000 0000101 000 0000000 000 1010
0990000 1001 1001111 000 1001000 101 1111
5550101 0101 0101010 110 1101101 101 0101
9991001 1001 1001111 111 1001001 111 1111

Смотрите также

Рекомендации

  1. ^ а б Коулишоу, Майкл Фредерик (2002-08-07) [май 2002]. «Плотно упакованное десятичное кодирование». Протоколы IEE - Компьютеры и цифровые методы. Лондон, Великобритания: Институт инженеров-электриков (IEE). 149 (3): 102–104. Дои:10.1049 / ip-cdt: 20020407. ISSN  1350-2387. Получено 2016-02-07.
  2. ^ Коулишоу, Майкл Фредерик (2014) [июнь 2000]. "Краткое описание кодирования десятичных данных Чен-Хо". IBM. В архиве из оригинала от 24.09.2015. Получено 2016-02-07.
  3. ^ IEEE Computer Society (29 августа 2008 г.). Стандарт IEEE для арифметики с плавающей запятой. IEEE. Дои:10.1109 / IEEESTD.2008.4610935. ISBN  978-0-7381-5753-5. IEEE Std 754-2008. Получено 2016-02-08.
  4. ^ ISO / IEC / IEEE 60559: 2011. 2011. В архиве из оригинала 2020-06-03. Получено 2016-02-08.
  5. ^ Коулишоу, Майкл Фредерик (2007-02-13) [2000-10-03]. "Краткое описание плотно упакованного десятичного кодирования". IBM. В архиве из оригинала от 24.09.2015. Получено 2016-02-07.

дальнейшее чтение