Алгоритм сложения в коде 2-4-2-1
1. Проверить знаки слагаемых – отрицательные перевести в ОК путём инвертирования всех тетрад.
2. Сложить двоично-десятичные числа по правилам двоичной арифметики.
3. Выполнить коррекцию суммы в соответствии с изложенными выше правилами. При коррекции единицы переноса между тетрадами отбрасываются.
4. Проверить знак результата – отрицательный перевести в ПК путём инвертирования тетрад.
Пример.
Сложить десятичные числа А=-63,58 и В=46,74 в коде 2-4-2-1. Масштабируем операнды М=102 и кодируем цифры чисел в ПК:
АПК = 1,1100.0011.1011.1110.
ВПК = 0,0100.1100.1101.0100.
Переводим отрицательное число в ОК и складываем:
АОК = 1,0011. 1100. 0100.0001.
ВОК = 0,0100. 1100. 1101.0100.
1,1000.(!)1001.(!)0001.0101. – сумма
0110. 1010.0110. – коррекция
(А+В)ОК = 1,1110. 0011. 0001.1011.
Сумма отрицательная – переводим её в ПК путём инвертирования тетрад: (А+В)ПК = 1,0001.1100.1110.0100.
Умножаем на масштаб и получаем верный результат:
А+В=-16,84.
Пентадный код 3а+2
Таблица 5.
В названии кода представлена формула, в соответствии с которой формируются 5-тиразрядные двоичные коды десятичных цифр –пентады ( в формуле а – десятичная цифра).
Обратные коды любой десятичной цифры получаются путём инвертирования двоичной пентады, что подтверждается соотношением:
31-(3а+2)=3(9-а)+2
При алгебраическом сложении десятичных чисел возможны следующие случаи.
1. Нет единиц переноса ни в данную пентаду, ни из данной пентады (СК = 0, СК+! = 0): SК = (3АК+2)+(3ВК+2)=3(АК+ВК)+4 –
в результирующей пентаде по сравнению с формулой кода «лишняя» двойка, которую надо вычесть. Следовательно, необходима коррекция кодом -210=-000102=11110ДК.
2. В данную пентаду есть единица переноса, а из данной пентады нет единицы переноса (СК=1,СК+!=0):
SК = (3АК+2)+(3ВК+2)+1=3(АК+ВК+1)+2 –
результат верный, коррекция не нужна.
3. В данную пентаду нет единицы переноса, а из данной пентады есть единица переноса (СК=0,СК+1=1):
SК = (3АК+2)+(3ВК+2)-32=3(АК+ВК-10)+2 –
Результат верный, коррекция не нужна.
4. Есть единица переноса и в данную пентаду, и из данной пентады (СК=1,СК+1=1): SК = (3АК+2)+(3ВК+2)+1-32=3(АК+ВК+1-10) –
В результирующей пентаде по сравнению с формулой кода нет двойки, которую надо прибавить для получения верной десятичной цифры. Следовательно, необходима коррекция кодом +210=000102.
Алгоритм сложения в коде 3а+2
1. Проверить знаки слагаемых – отрицательные перевести в ОК путём инвертирования пентад.
2. Сложить двоично-десятичные числа по правилам двоичной арифметики, фиксируя единицы переноса из пентады в пентаду.
3. Выполнить коррекцию, прибавляя код 11110 к пентадам, в которые и из которых не формировались единицы переноса, и код 00010 к пентадам, в которые и из которых сформировались единицы переноса. При коррекции единицы переноса между пентадами следует отбрасывать.
4. Проверить знак результата – отрицательный перевести в ПК путём инвертирования пентад.
Пример.
Сложить числа А=-85,7 и В=-39,1 в коде 3а+2. Масштабируем операнды с «запасом» - М=103, чтобы избежать ПРС при сложении чисел одинакового знака, и кодируем цифры чисел в ПК:
АПК = 1,00010.11010.10001.10111.
ВПК = 1,00010.01011.11101.00101.
Выполняем перевод в ОК и складываем операнды:
АОК = 1, 11101. 00101. 01110. 01000.
ВОК =1, 11101. 10100. 00010. 11010. 11,(1)11010.(0)11001.(0)10001.(1)00010.
После сложения единицы переноса из знакового разряда с младшей пентадой окончательно Фиксируем переносы между пентадами, чтобы выполнить коррекцию:
1,(1)11010.(0)11001.(0)10001.(1)00011.(1)
Коррекция . 11110. . 00010.
(А+В)ОК =1, 11010. 10111. 10001. 00101.
(А+В)ПК =1, 00101. 01000. 01110. 11010.
Умножаем на масштаб и получаем верный результат:
А+В=-124,8.
Сравнение двоично-десятичных кодов
Идеального по всем параметрам двоично-десятичного кода нет: все коды требуют введения коррекции при сложении, причём, выявление признаков коррекции в некоторых кодах является довольно непростой задачей.
Можно выделить совокупность параметров, характеризующих двоично-десятичные коды, и по каждому параметру указать «лучшие» и «худшие» коды. Однако, интегральной характеристики, позволяющей выделить лучший код по совокупности параметров, получить не удаётся в силу того, что затруднительно определить весовые коэффициенты для каждого параметра в этой интегральной характеристике. Кроме того, на выбор кода реально влияют множество трудно учитываемых условий и факторов.
Среди главных параметров рассмотрим следующие.
1. Простота формирования обратного кода, иначе говоря обладание свойством самодополняемости. Здесь можно указать «худший» по этому параметру код – код с естественными весами 8-4-2-1, остальные рассмотренные коды обладают свойством самодополняемости.
2. Простота обнаружения признаков коррекции. Здесь очевидно, что проще зафиксировать единицу переноса, чем выявлять «неправильные» тетрады, как в коде 8-4-2-1, или анализировать тетраду по признаку, больше или меньше она пятёрки, как в коде 2-4-2-1. По этому параметру код 2-4-2-1 самый сложный, за ним по сложности можно поставить код 8-4-2-1.
3. Частота введения коррекции, то есть какая доля тетрад или пентад корректируется. «Худший» по этому параметру код 8-4-2-1+3, который требует коррекции всех 100% тетрад, в остальных рассмотренных кодах корректируется примерно 50% тетрад или пентад.
4. Количество корректирующих кодов: по два таких кода практически во всех рассмотренных двоично-десятичных кодах, поэтому трудно отдать предпочтение какому-либо из кодов.
Умножение двоично-десятичных чисел
В двоично-десятичной арифметике умножение можно выполнять традиционно, взяв за основу известные четыре способа умножения, причём, сдвиги в каждом такте цикла умножения выполняются на один десятичный разряд и вводится соответствующая коррекция. Основной недостаток этого подхода – большое количество операций сложения и, как следствие, невысокое быстродействие.
Большой интерес представляют некоторые оригинальные методы умножения двоично-десятичных чисел, с которыми предлагается познакомиться студентам.
Табличный метод умножения
В основе метода - древнейший способ ручного счёта. При реализации на ЭВМ используются быстродействующие постоянные запоминающие устройства (ПЗУ), построенные по канонической схеме «дешифратор-шифратор». Это обеспечивает высокую однородность арифметико-логического устройства (АЛУ) вычислительной машины.
В ПЗУ хранятся две таблицы, содержащие результаты умножения одноразрядных десятичных чисел: в таблице слева хранятся младшие разряды, справа – старшие разряды произведений.
При умножении с младших разрядов множителя табличным методом образуются два частичных произведения: последовательность цифр младших разрядов и сдвинутая влево на один десятичный разряд последовательность цифр старших разрядов произведения.
Достоинство метода – большое быстродействие за счёт одновременного и независимого образования всех разрядов частичных произведений. К недостаткам метода можно отнести дополнительные затраты памяти для хранения таблиц.
Старорусский метод удвоения-деления пополам
Алгоритмсостоит в удвоении на каждом шаге множимого путём сдвигаего один двоичный разряд влево и делении пополам множителя сдвигом на один двоичный разряд вправо. Алгоритм повторяют до тех пор, пока множитель не станет равным нулю.
Операнды представлены в коде с естественными весами 8-4-2-1 и при сдвигах как влево, так и вправо необходима коррекция.
Сдвиг влево требует такой же коррекции, как и при алгебраическом сложении: для «неправильных» тетрад и для тетрад, из которых сформировались единицы переноса, нужна коррекция кодом +610=01102.
Сдвиг вправо требует коррекции кодом -310=11012 для тетрад, в которые сформировались единицы переноса. Этот корректирующий код образуется как разность между результатом деления пополам 16-ти и нужным результатомделения пополам 10-ти: 8-5=3. Эту разность надо вычесть из тетрад, в которые сформировались единицы переноса.
Основной недостаток метода – невысокое быстродействие из-за множества коррекций.
Пример.
Перемножить десятичные числа 43*38, считая число 43 множителем, и использовать для кодирования десятичных цифр код 8-4-2-1 и старорусский метод умножения.
4310=1010112=0100.0011.2-10; 3810=0011.1000.2-10
В соответствии с алгоритмом множимое должно сдвигаться влево, поэтому регистр множимого должен иметь дополнительные разряды. Кроме того, операнды положительные – опускаем операцию со знаками.
Множитель
| Множимое
| Сумма част. произвед.
| 0100.0011.
| 0000.0000.0011.1000.
| 0000.0000.0011.1000.
| 0010.0001
| 0000.0000.0111.0000.
.0110.
0000.0000.0111.0110.
| 0000.0000.0011.1000. 0000.0000.0111.0110. 0000.0000.1010.1110.
0000.0000.0110.0110.-к0000.0001.0001.0100.
| 0001.0000.
| 0000.0000.1110.1100.
.0110.0110.
0000.0001.0101.0010.
|
| 0000.1000.
.1101.
0000.0101.
| 0000.0010.1010.0100.
.0110. .
0000.0011.0000.0100.
| 0000.0001.0001.0100. 0000.0011.0000.0100. 0000.0100.0001.1000.
| 0000.0010.
| 0000.0110.0000.1000.
|
| 0000.0001.
| 0000.1100.0001.0000.
.0110. .0110.
0001.0010.0001.0110.
| 0000.0100.0001.1000. 0001.0010.0001.0110. 0001.0110.0010.1110.
0000.0000.0000.0110. 0001.0110.0011.0100.
| 0000.0000.
|
| 1 6 3 4
|
Примечание.Цифры в младшем разряде множителя после очередного сдвига и коррекции, взятые в обратном порядке, образуют представление множителя в двоичной системе счисления (в таблице эти цифры выделены жирным шрифтом и подчёркнуты). Этот способ можно использовать для перевода чисел из двоично-десятичной системы счисления в двоичную систему счисления.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|