Эффективная система двоичного кодирования для десятичных цифр, используемых в десятичных числах с плавающей точкой
Плотно упакованная десятичная система ( DPD ) — эффективный метод двоичного кодирования десятичных цифр.
Традиционная система двоичного кодирования для десятичных цифр, известная как двоично-кодированная десятичная система (BCD), использует четыре бита для кодирования каждой цифры, что приводит к значительной потере пропускной способности двоичных данных (поскольку четыре бита могут хранить 16 состояний и используются для хранения только 10), даже при использовании упакованного BCD . Плотно упакованная десятичная система является более эффективным кодом, который упаковывает три цифры в десять бит, используя схему, которая позволяет сжимать или расширять до BCD всего с двумя или тремя задержками аппаратного вентиля . [1]
Плотно упакованное десятичное кодирование является усовершенствованным вариантом кодирования Чена–Хо ; оно обеспечивает те же преимущества в сжатии и скорости, но особое расположение используемых битов дает дополнительные преимущества:
- Сжатие одной или двух цифр (в оптимальные четыре или семь бит соответственно) достигается как подмножество трехзначного кодирования. Это означает, что произвольное количество десятичных цифр (не только кратных трем цифрам) может быть эффективно закодировано. Например, 38 = 12 × 3 + 2 десятичных цифры могут быть закодированы в 12 × 10 + 7 = 127 бит, то есть 12 наборов из трех десятичных цифр могут быть закодированы с использованием 12 наборов из десяти двоичных бит, а оставшиеся две десятичные цифры могут быть закодированы с использованием дополнительных семи двоичных бит.
- Упомянутое выше подмножество кодирования представляет собой просто самые правые биты стандартного трехзначного кодирования; закодированное значение можно расширить, просто добавив начальные нулевые биты.
- Все семибитные числа 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 , а оставшиеся биты заполняются постоянными нулями или единицами.
Биты b7, b4 и b0 ( c
, f
и i
) проходят через кодировку без изменений и не влияют на значение других бит. Оставшиеся семь бит можно считать семибитной кодировкой для трех цифр с основанием 5.
Биты b8 и b9 не нужны и игнорируются при декодировании групп DPD с тремя большими цифрами (отмечены как «x» в последней строке таблицы выше), но заполняются нулями при кодировании.
Восемь десятичных значений, все цифры которых — 8 или 9, имеют по четыре кодировки. Биты, отмеченные x в таблице выше, игнорируются при вводе, но всегда будут 0 в вычисляемых результатах. (3 × 8 = 24 нестандартных кодировок заполняют промежуток между 10 3 = 1000 и 2 10 − 1 = 1023.)
Примеры
В этой таблице показаны некоторые репрезентативные десятичные числа и их кодировки в формате BCD, Chen–Ho и плотно упакованной десятичной системе (DPD):
Смотрите также
Ссылки
- ^ ab Cowlishaw, Michael Frederic (2002-08-07) [май 2002]. "Densely Packed Decimal Encoding". IEE Proceedings - Computers and Digital Techniques . 149 (3). Лондон, Великобритания: Institution of Electrical Engineers : 102–104. doi :10.1049/ip-cdt:20020407. ISSN 1350-2387. Архивировано из оригинала 20 мая 2017 г. Получено 07 февраля 2016 г.
- ^ Cowlishaw, Michael Frederic (2014) [июнь 2000]. "A Summary of Chen-Ho Decimal Data encoding". IBM . Архивировано из оригинала 2015-09-24 . Получено 2016-02-07 .
- ^ IEEE Computer Society (29.08.2008). Стандарт IEEE для арифметики с плавающей точкой. IEEE . doi :10.1109/IEEESTD.2008.4610935. ISBN 978-0-7381-5753-5. IEEE Std 754-2008 . Получено 2016-02-08 .
- ^ ISO/IEC/IEEE 60559:2011. 2011. Архивировано из оригинала 2020-06-03 . Получено 2016-02-08 .
- ^ Cowlishaw, Michael Frederic (2007-02-13) [2000-10-03]. "A Summary of Densely Packed Decimal encoding". IBM . Архивировано из оригинала 2015-09-24 . Получено 2016-02-07 .
Дальнейшее чтение
- Cowlishaw, Michael Frederic (2003-02-25) [2002-05-20, 2001-01-27]. Написано в Ковентри, Великобритания. "Десятично-двоичный кодер/декодер" (Патент США). Армонк, Нью-Йорк, США: International Business Machines Corporation (IBM). US6525679B1 . Получено 2018-07-18[1] и Cowlishaw, Michael Frederic (2007-11-07) [2004-01-14, 2002-08-14, 2001-09-24, 2001-01-27]. Написано в Винчестере, Хэмпшир, Великобритания. "Десятично-двоичный кодер/декодер" (Европейский патент). Армонк, Нью-Йорк, США: International Business Machines Corporation (IBM). EP1231716A2 . Получено 2018-07-18 .[2][3][4] (Примечание. Этот патент касается DPD.)
- Bonten, Jo HM (2009-10-06) [2006-10-05]. "Packed Decimal Encoding IEEE-754-2008". Гельдроп, Нидерланды. Архивировано из оригинала 2018-07-11 . Получено 2018-07-11 .(Примечание. Более старую версию можно найти здесь: Упакованная десятичная кодировка IEEE-754r.)
- Savard, John JG (2018) [2007]. "Chen–Ho Encoding and Densely Packed Decimal". quadibloc . Архивировано из оригинала 2018-07-03 . Получено 2018-07-16 .