- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Выполнение операций в двоично-десятичной системе счисления
В разделе 2.1 приведен вариант кодирования десятичных цифр их двоичными эквивалентами. Этот вариант не является единственно возможным. Ничто не препятствует приведению в соответствие любой десятичной цифре любого, и быть может не единственного, двоичного кода. Необходимо лишь обеспечить достаточное количество двоичных кодов для кодирования 10 десятичных цифр и двоичному коду приводить в соответствие не более чем одну десятичную цифру.
Двоичный код длиной
имеет
значений. При
количество двоичных кодов длиной 3
недостаточно для кодирования 10 десятичных
цифр. При
количество значений вектора превышает
необходимое их число на 6. Поэтому при
существует избыточность кодов, и
некоторые из них не используются для
кодирования десятичных цифр или для
кодирования отдельных цифр используют
2 и более кодов. В последнем случае имеет
место неоднозначность представления
десятичных цифр двоичными кодами.
Наличие в записи двоично-десятичного
числа кода неиспользуемого для кодирования
десятичных цифр следует рассматривать
как ошибку в записи числа.
Выбор кодов для кодирования цифр можно выполнять произвольно, но так чтобы код, использованный для кодирования одной цифры, не использовался для кодирования другой. Очевидно, что даже при минимальном количество возможных вариантов способов кодирования весьма велико, особенно если допускать неоднозначное кодирование цифр.
В табл.4.11 приведены некоторые варианты способов кодирования десятичных цифр двоичными кодами.
Таблица 4.11
Десятичная цифра |
Двоичные коды десятичных цифр |
||||||
Произвольный |
8421 |
2421 |
8421+6 |
8421+3 |
|
Код Джонсона |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
0 1 2 3 4 5 6 7 8 9 |
1000 0001 1110 0110 1111 1101 1100 0011 0100 0010 |
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 |
0000 0001 0010 1001 1010 0101 1100 0111 1110 1111 |
0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 |
0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 |
0110 0101 0100 1011 1010 1001 1000 1111 1110 1101 |
00000 00001 00011 00111 01111 11111 11110 11100 11000 10000 |
В колонке 2 приведен вариант способа кодирования десятичных цифр, при конструировании которого выбор кодов выполнялся произвольно, причем 6 кодов: 0000; 0101; 0111; 1001; 1010; 1011 для кодирования цифр не использованы. Поэтому запись 1111 0000 0001 не является числом, а запись 1111 1110 0001 является двоично-десятичным кодом числа без знака 42110. Для кодирования и декодирования десятичных чисел этим способом необходимо помнить таблицу кодирования, что сильно осложняет процессы преобразований.
В колонках 3-7 коды выбраны не случайно. Конструктор, выбирая код для кодирования десятичной цифры, придерживался некоторого правила.
Коды в колонке 3 выбирались так, чтобы их количественный эквивалент был равен количественному эквиваленту кодируемой десятичной цифры. При декодировании цифр этим способом нет необходимости помнить таблицу кодирования. Можно выполнять подсчет количественного эквивалента кода цифры.
Коды в колонке 4
выбирались аналогично, но вместо весов
разрядов 8421 выбраны веса 2421. Например,
количественный эквивалент кода 1010 в
колонке 4 равен
.
Коды колонок 3 и 4
называют взвешенными
кодами.
Подобных кодов существует много, например
код с весами разрядов 5211 или 4221 или 1125.
Взвешенные коды могут иметь отрицательные
веса некоторых разрядов, например
.
Закодируйте в коде
все десятичные цифры.
В коде 2421 колонки 4, так же как и в коде 8421, не использованы 6 кодов. Однако можно определить код 2421 так, что все 16 кодов будут использоваться. Для этого достаточно разрешить запись любого кода из 16 возможных. Тогда, например цифра 4 может быть представлена двумя кодами: 0100 и 1010, а цифра 5 – кодами: 1011 и 0101. Ничего подобного нельзя сделать в коде 8421, так как количественный эквивалент любого неиспользованного кода превышает 9. Код 2421 интересен так же тем, что содержит минимально возможные веса разрядов.
Коды в колонках 5 и 6 называют взвешенными смещенными кодами. Если сопоставить коды одной строки в колонках 3 и 5, то не трудно видеть, что код в колонке 5 выбран на 6 большим, чем в колонке 3. Значение 6 называют смещением. Смещение кода в колонке 6 равно 3.
Код в колонке 7
взвешенный со смещением (-2). Значение
кода больше значения кодируемой им
цифры на 2. Например, код 1001 имеет значение
,
что на 2 больше кодируемой им цифры 5.
Код Джонсона имеет длину 5 бит. Этот код интересен тем, что для увеличения значения цифры на 1 достаточно сдвинуть исходный код на 1 разряд влево с занесением в младший разряд цифры инверсной цифре выдвигаемой из старшего разряда. Например, для увеличения цифры 2 на 1 достаточно сдвинуть ее код 00011 влево с занесением инверсии 0 старшего разряда в младший разряд. Действительно, получим 00111 – код цифры 3.
Для уменьшения цифры на 1 достаточно сдвинуть ее код на разряд вправо с занесением в освобождающийся старший разряд инверсии цифры выдвигаемой из младшего разряда. Например, сдвиг вправо кода 11111 (5) приведет к получению кода 01111 (4).
Десятичные числа со знаком в двоично-десятичных кодах 8421; 8421+6 или 8421+3 могут быть представлены в форматах рис.3-2 или рис.3-3 с одним битом знака 0 (+) и 1 (–). Поля целого и дробной части состоят из позиций десятичных цифр. Каждая позиция десятичной цифры включает четыре бита, в которые записан двоичный код десятичной цифры.
Двоично-десятичные
числа могут быть записаны в формат в
прямом, обратном или дополнительном
коде. Например, число
,
дополнение которого до
равно
,
будет записано в дополнительном коде
в формат рис.3-2 как 1|12|540. Если это
десятичное число представлено в
двоично-десятичном коде 8421, то его запись
в формате с двумя позициями целого и
тремя позициями дробной части
1 | 0001 0010 | 0101 0100 0000
Здесь позиции двоично-десятичных кодов цифр разделены пробелами для наглядности.
Конструктор цифровых устройств в зависимости от их функции выбирает такой способ кодирования десятичных цифр, который позволяет обеспечить минимум затрат оборудования, максимальное быстродействие и/или иные показатели качества проектируемого изделия в условиях множества ограничений. При конструировании устройств, выполняющих арифметические операции с десятичными числами, можно использовать любой способ кодирования цифр и хранить таблицы сложения, вычитания и умножения двоично-десятичных цифр в предназначенных для этого устройствах памяти. Однако размерность этих таблиц 1010 велика, что требует большого объема памяти и, следовательно, усложняет устройства.
Достоинство двоичной системы счисления в том, что указанные таблицы имеют минимальную размерность 22. Поэтому целесообразно выбирать такой способ кодирования десятичных цифр двоичными кодами, который позволяет вычислять сумму, разность или произведение десятичных цифр используя двоичные таблицы. В связи с этим получили распространение двоично-десятичные коды 8421; 8421+6 или 8421+3.
В разделе 3.1.1.4 отмечена низкая эффективность представления десятичных чисел при кодировании десятичных цифр двоичными кодами. Чтобы ее повысить выполняют совместное кодирование пар цифр десятичного числа двоичным кодом. При таком способе кодирования каждой паре цифр десятичного числа, имеющей 100 значений, приводят в соответствие 7 разрядный двоичный код, имеющий 128 значений. “Лишние” 28 двоичных кодов являются избыточными. Совместное кодирование пары десятичных цифр позволяет экономить 1 бит. Если десятичное число имеет пар десятичных цифр, то будет сэкономлено бит.
Стандарт IEEE 754-2008 [11] рекомендует применять для кодирования мантиссы десятичных чисел в форматах с плавающей точкой два варианта кодирования троек десятичных цифр 10 разрядным двоичным кодом. Совместное кодирование тройки десятичных цифр позволяет экономить 2 бита.
