Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы_ГОС_2007.doc
Скачиваний:
72
Добавлен:
10.02.2016
Размер:
3.91 Mб
Скачать

Формы представления чисел

Разрядность числа n ограничивает объем диапазона V CC q. Для положительных чисел V = qn. Например, для 8-разрядных двоичных чисел (q=2, n=8) V=256. При этом сам диапазон чисел может быть определен достаточно разнообразно: от 0000.0000 до 1111.1111 или (для описания значительно меньших величин) от 0.000000000 до 0.011111111 итд. Указанные диапазоны отличаются между собой коэффициентом К = ql, где l - целое число, определяемое изменением положения разделительной точки. Та или иная фиксация ее положения позволяет при одном и том же объеме диапазона описывать разные величины чисел. Поэтому диапазон можно выбрать в известной мере произвольно, назначая соответствующий коэффициент К. Наиболее часто диапазон чисел выбирается в области целых чисел или правильных дробей. Для приведенного примера в таких диапазонах находятся соответственно числа от 00000000 до 11111111 и от 0.00000000 до 0.11111111.

Описанная форма представления чисел называется естественной, или формой с фиксированной точкой. Другая широко используемая форма представления чисел - нормальная, называемая также формой с плавающей точкой. В ней число А представляется следующим образом: А = т • qP, где т и р- числа в естественной форме (р - целое), называемые соответственно мантиссой и порядком числа А.

Очевидно, что число с плавающей точкой может быть представлено в нормальной форме бесчисленным множеством способов, например,

13610 = 1360 x 10-1 = 0.0136 x 10 4 = 136 x 100 = 0.136 x 10 3.

Для однозначности представления на мантиссу т накладываются ограничения q-1 <= | т | < 1, при которых мантисса и само число называются нормализованными. В приведенном примере этому соответствует последний из указанных способов представления числа. Достоинством естественной формы представления чисел - существенно больший диапазон представления чисел (при одном и том же количестве разрядов, выделенных для записи числа). Действительно, при использовании л разрядов для записи числа в естественной форме, а также п1 и п2 разрядов для записи соответственно мантиссы и порядка числа в нормальной форме, n1+n2=n, диапазоны чисел (в области положительных чисел) с фиксированной и плавающей точками составляют соответственно О < А < qnи 0<А < qqn2.

Представление чисел с учетом знака

Распространенными формами кодирования чисел со знаком является их запись в прямом, обратном и дополнительном кодах. Это относится непосредственно к числам с фиксированной точкой, которые также могут быть мантиссами и порядками чисел с плавающей точкой. Коды обозначаются индексами соответственно пр, об и дп.

Прямой код числа образуется кодированием знака числа нулем или значением q-1 соответственно для положительных и отрицательных чисел. Записывается код знака числа перед старшей цифрой числа и отделяется от нее разделительной точкой. Это соответствует описанию чисел в диапазоне правильных дробей. Знак расширяет ' диапазон представления чисел, описываемый на числовой оси значениями от 0.хх ... х до 1.хх ... х - разряд числа).

Прямой, обратный и дополнительный коды положительных чисел совпадают между собой.

Обратный код отрицательного числа образуется из прямого кода заменой его цифр на их дополнения до величины q-1. Код знака сохраняется без изменений. Замена цифр дополнениями для двоичной СС совпадает с операцией инверсии: нули заменяются единицами, а единицы - нулями. Знак принимает единичное значение.

Дополнительный код отрицательного числа образуется из обратного кода увеличением его на единицу младшего разряда. При этом перенос из знакового разряда числа игнорируется.

Форматы чисел

В ЭВМ информация представляется с использованием множества двоичных разрядов, называемого разрядной сеткой. Количество этих разрядов определяет длину разрядной сетки. Для чисел заданного диапазона используется разрядная сетка с заранее определенной длиной и назначением разрядов, что называется заданием чисел в определенном формате. Задание диапазона предполагает выбор СС, формы, кода и разрядности чисел, что находит отражение в описании формата. Длина разрядной сетки является также длиной формата. Для указания длин форматов используются единицы измерения информации:, бит (один двоичный разряд) и байт, равный восьми битам, а также слово и его производные (полуслово, двойное слово), по-разному определяемые для различных семейств ЭВМ.

Назначение разрядов в формате структурирует разрядную сетку, т. е. разбивает ее на поля, объединяющие разряды сходного назначения, например, разряды мантиссы или разряды порядка.

В качестве примера рассмотрим форматы чисел системы IBM 360 / 370, которые легли в основу большинства современных форматов. Для их записи используется шестнадцатеричная СС. Форматы чисел имеют длину полуслово, слово и двойное слово, содержащие соответственно 2, 4, и 8 байт. Двоичные разряды в форматах нумеруются слева направо, начиная с нулевого разряда.

Форматы Н, F, Е и D используются для описания двоичных чисел с фиксированной и F) и плавающей и D) точками. Для представления десятичных чисел применяются форматы Z и Р.

В коротком H и длинном F форматах, которые имеют длину соответственно полуслово и слово, записываются целые двоичные числа в дополнительном коде. Нулевой двоичный разряд является знаковым Зн. Формат H позволяет представить числа в диапазоне от -215 до 215-1, а формат F - от -231 до 231-1.

Короткий E и длинный D форматы представления двоичных чисел с плавающей тонкий имеют длину соответственно слово и двойное слово. В нулевом двоичном разряде форматов указывается код Зн знака мантиссы, а в семи следующих двоичных разрядах первого байта записывается характеристика х, представляющая собой порядок р в виде положительного числа. В следующих байтах записывается мантисса т, которая представляется в прямом коде (без знака).

Форматы Е и D описывают двоичные числа в двоично-кодированной шестнадцатеричной СС, что проявляется в использовании для порядка основания 16 и нормализации мантиссы с точностью до тетрады. Порядок чисел изменяется от -64 до +63. Характеристика х = р + 64 имеет пределы изменения от 0 до 127, т. е. смещает порядок в область положительных чисел. Формат D использует большую длину для увеличения разрядности мантиссы т, что обеспечивает представление чисел с большей точностью. Диапазон абсолютных значений в форматах Е и D составляет величины от 1664 до +63, что эквивалентно пределам от 10-77 до 1076. Для представления в форматах Е и D число необходимо перевести в шестнадцатеричную СС, представить его в форме с плавающей точкой, по порядку определить характеристику и занести код знака мантиссы, характеристику и мантиссу в соответствующие поля форматов.

Например,

30010= 12C16 = 0,12C16 x 163 = 4312COOOE = 4312СОООООООООООD

Форматы Z и Р используют двоично-десятичную СС с весами 8, 4, 2, 1. Знак числа кодируется одной из тетрад А, С, Е, F для положительных чисел и В, D - для отрицательных чисел.

Формат Z называется зонным и используется при вводе и выводе чисел. Для записи каждой цифры отводится один байт, причем тетрада d, кодирующая цифру, занимает правую часть байта, а в левой части указывается зона - тетрада г, которая принимает для всех цифр значение F16, отличающее их от других символов входной или выходной информации. Крайний правый байт, кодирующий младшую цифру dL, на месте зоны содержит код знака Sign.

Формат Р, называемый упакованным, используется при выполнении операций над числами. Он образуется из зонного формата путем удаления зон и перенесения кода знака на место справа от тетрады младшей цифры. При этом в каждом байте записывается по две цифры или цифра и знак. Формат занимает целое количество байт и при необходимости дополняется слева от старшей цифры нулевой тетрадой. Форматы Z и Р могут иметь длину от 1 до 16 байт.

На рис. 3 показаны описанные форматы чисел.

27. Алгоритмы сложения чисел.

Воснове выполнения всех математических операций лежит сложение чисел - базовая арифметическая операция.

Впределах 1 разряда операция сложения (или вычитания) для чисел ССq может быть выполнена по принципу счета, описанному схемой алгоритма алг.1 (рис. 4). Блок 2 вводит цифры a и b данного разряда слагаемых. Блок 3 определяет начальное значение суммы s. Блок 4 организует цикл из b итераций, в каждой из которых в блоке 5 сумма S увеличивается (для вычитания уменьшается) на единицу. Блок 6 завершает тело цикла. Блок 7 выводит сумму s < q. Алгоритм закончен.

При S>=q имеет место перенос единицы в следующий разряд.

Сложение чисел с учетом переноса предполагает выполнение по каждому разряду последовательности действий по схеме алгоритма алг. 2, показанной на рис. 5. Блок 2 вводит исходные данные: цифры a и b разряда слагаемых, а также перенос p из предыдущего разряда. Блок 3 определяет сумму s < 2q в пределах одного разряда 2q-й СС по алгоритму алг. 1. Блок 4 сравнивает значения s с основанием СС q. При s<q сумма s совпадает с ее значением в q СС. Поэтому выполняется блок 5, который устанавливает нулевое значение переноса р в следующий разряд. В противном случае значение суммы переводится в блоке 6 в СС с основанием q (путем уменьшения на величину q), а блок 7 устанавливает единичное значение для переноса р в следующий разряд. Блок 8 выводит полученные значения суммы s и переноса р. Алгоритм закончен.

Сложение n-разрядных положительных чисел может быть описано алгоритмом алг. 3, который показан на рис. 6. Блок 2 вводит слагаемые А и В, а также их разрядность п. Блок 3 устанавливает исходное нулевое значение переноса р. Блок 4 организует цикл из п итераций. Тело цикла содержит блоки 5 и б. Блок 5 обращается к алгоритму алг. 2. описанному на рис 5, и передает ему цифры я, и b, i-ro разряда слагаемых А и В, а также переноса р. По этим данным вычисляются новое значение переноса р и сумма s, которые возвращаются в алгоритм сложения чисел алг. 3. Блок 6 выводит i-й разряд результата сложения. Предполагается, что результат имеет длину л разрядов, т. е. перенос из n-го разряда в (п+1)-и равен нулю. Блок 7 завершает тело цикла. Алгоритм закончен.

В двоичной СС сложение чисел осуществляется путем вычисления по каждому разряду значений суммы s и переноса р с использованием булевых функций s=SUM (а, b, р), p=CAR (а, b, р), которые описаны в табл. 3.

Ц

Таблица 3

p

b

a

р

s

0

0

0

0

0

0

0

1

0

1

0

1

0

0

1

0

1

1

1

0

1

0

0

0

1

1

0

1

1

0

1

1

0

1

0

1

1

1

1

1

ифровое устройство, вычисляющее эти функции, называется полным сумматором. Сложение двух двоичных цифр осуществляется путем вычисления булевых функций SUM (a, b, 0) и CAR (a, b, 0), которые описаны в верхней половине таблицы и выполняются полусумматором. Третий аргумент, который принимает в функциях полусумматора нулевые значения, выпускается и эти функции принимают вид SUM (a, b) и CAR (a, b). Функциональные изображения полного сумматора (а) и полусумматора (б) показаны на рис. 7.

При выполнении функций полусумматора по каждому разряду слагаемых А и В вычисляются два числа S = SUM (А, В) и Р = CAR (А, В), каждая цифра в которых является результатом выполнения соответствующей функции от соответствующих цифр.

На рис. 8 изображена схема алгоритма алг. 4 ускоренного сложения, в котором используется одновременная обработка разрядов чисел, которые принимают участие в сложении. Блок 2 выполняет ввод слагаемых - чисел А и В. Блок 3 осуществляет проверку на ноль числа В. Если условие В=0 не выполняется, то вычисляются функции, описанные в блоке 4. Полученные при этом числа S и Р в блоке 5 присваиваются переменной А и со сдвигом на одну позицию в сторону старших разрядов - переменной В. Далее опять выполняется блок 3 и проверяется условие В=0, при выполнении которого блок 6 выводит значение переменной А как окончательный результат. Алгоритм закончен.

Предполагается, что разрядностьn чисел А и В достаточна для записи результата сложения. Поэтому при сдвиге числа Р теряется разряд с нулевым значением. Количество разрядов числа Р, которые могут принимать единичное значение, уменьшается с каждым сдвигом не менее, чем на единицу. Из этого следует быстрое вычисление результата, которое только в наихудшем случае требует n-кратного вычисления функций SUM и CAR полусумматора.

В основу сложения чисел в двоично-десятичной СС положено сложение двоичных

чисел с коррекцией результата по каждой тетраде. На рис. 9 показан алгоритм алг. 5

сложения десятичных цифр, которые изображены тетрадами в двоично-кодированной СС с весами 8, 4, 2, 1. Блок 2 вводит слагаемые тетрады а{1-4) и Ь{1-4},

двоичные разряды которых пронумерованы, начиная с младшего разряда, а также перенос

р из предыдущей тетрады. Блок 3 складывает тетрады по алгоритму алг. 3 сложения

двоичных чисел с учетом переноса р и формирует при этом 5-разрядное двоичное число s1, которое при s1<10 совпадает в четырех младших разрядах с тетрадой результата. В случае s1>10 в блоке 4 выполняется перевод числа s1 в двоично-десятичную СС, с получением числа s2=:s1+6, которое содержит тетраду результата s и перенос р в следующую тетраду. Блок 5 присваивает переносу р его значение, которое было вычислено в s2. Блок 6 в зависимости от переноса р предписывает выполнение или блока 7, или блока 8, которые присваивают тетраде результата s четыре младших разряда соответственно чисел s1 или s2. Блок 9 выводит результаты s и р. Алгоритм закончен.

Сложение многотетрадных чисел выполняется последовательно обработкой цифр, т. е. по алгоритму алг. 3, который изображен на рис. 6, или по алгоритму ускоренного сложения, в котором подобно алгоритму алг. 4 сложения двоичных чисел (рис. 8) цифры (тетрады) прибавляются одновременно без учета межтетрадных переносов, а переносы составляют число, сложение с которым выполняется в следующей итерации.

Рассмотрим пример сложения чисел в двоично-десятичной СС.

Рассмотренные до сих пор алгоритмы сложения выполняют действия над положительными числами. Использование в качестве слагаемых чисел с произвольными знаками позволяет свести к операции сложения также и вычитание чисел, т. е. заменить операцию А - В на А + ( -В ). Для операции сложения чисел с произвольными знаками используется обратный и дополнительный коды представления чисел.

Сложение чисел в обратном коде выполняется в один или два этапа. На первом этапе обратные коды слагаемых складываются по алгоритму сложения положительных чисел, причем знаковый разряд рассматривается как один из разрядов положительного числа. На втором этапе полученная сумма складывается с переносом, вычисленным в знаковом разряде и взятым с весом младшего разряда. При нулевом значении переноса второй этап не выполняется. Результат вычисляется в обратном коде.

Сложение чисел в дополнительном коде выполняется сложением дополнительных кодов слагаемых (включая знаковый разряд) по алгоритму сложения положительных чисел. Перенос, вычисленный в знаковом разряде, теряется. Результат вычисляется в дополнительном коде.

При сложении чисел с одинаковыми знаками возможно переполнение разрядной сетки,что приводит к записи цифры числа на место знакового разряда. Потеря знакового разряда искажает результат. Для обнаружения факта переполнения разрядной сетки используется дублирование знакового разряда, т. е. запись в разрядной сетке двух подряд знаковых разрядов. Такие коды числа называются модифицированными.Сложение чисел в модифицированном обратном или дополнительном кодах позволяет идентифицировать переполнение разрядной сетки сравнением значений знаковых разрядов результата. При их совпадении результат находится в пределах разрядной сетки, а иначе происходит ее переполнение, что указывает на невозможность выполнения операции над этими числами в данном формате с фиксированной точкой.

Сложение чисел в обратном коде имеет преимущество, связанное с простотой перевода кодов: из прямого в обратный и из обратного в прямой. Вместе с тем, сложение чисел в дополнительном коде чаще оказывается предпочтительнее за счет простоты выполнения самой операции сложения.

Приведем примеры сложения чисел в обратном и дополнительном кодах:

Несовпадение значений знаковых разрядов указываетна переполнение разрядной сетки.

Несовпадение значений знаковых разрядов указывает на переполнение разрядной сетки.

Рассмотренные ранее алгоритмы сложения описывают выполнение операций над числами в натуральной форме представления. Для чисел с плавающей точкой операция сложения выполняется с предварительным выравниванием порядков, т. е. приведением чисел к одинаковым порядкам. Выравнивание порядков выполняется по наибольшему из порядков слагаемых и сопровождается денормализацией мантисс - операцией, которая обратна нормализации мантисс и осуществляется их сдвигом.

Для слагаемых A=m1•qP1 и B= т2 • q Р2 выравнивание порядков в процессе сложения приводит к следующему результату:

А + В = т qP, где р - порядок результата, р = max. (p1, р2);

т = m1 • q-(P-P1) + т2 • q-(P-P2) - мантисса результата,

- (р - р1) и - (р - р2) - выравнивающие разности, абсолютная величина и знак которых определяют величину (одна из них равняется нулю) и направление сдвига мантисс ml и т2 (слева направо, т. е. в сторону младших разрядов).

Мантисса т может быть получена в ненормализованном виде, что требует ее нормализации - сдвига на определенное количество позиций в сторону старших разрядов и соответствующего изменения порядка. Кроме того, мантисса может переполнять разрядную сетку. Использование модифицированных кодов позволяет не только идентифицировать факт переполнения, но также восстановить правильный результат. Это обеспечивается сдвигом мантиссы на одну позицию в сторону младших разрядов и увеличением порядка числа на единицу. Описанные преобразования мантиссы т и порядка р относятся к процессу нормализации результата сложения, который может осуществиться в границах возможного уменьшения или увеличения порядка результата. Если порядок принимает свое максимальное значение, то переполнение разрядной сетки мантиссы ведет к

переполнению разрядной сетки порядка и ситуации переполнения для сложения чисел с плавающей точкой. При этом результат операции определяется неправильным.

Приведем примеры сложения чисел с плавающей точкой:

0.4726*10 2 + 0.9132 10° = 102(0.4726 + 0.0091) = 0.4817 10 2,

0.10112 *2-1 +0.lllO*21 =21(00.00102+00.11102)=01.00002*21=0.10002*21

Достаточно распространенной является задача накопления суммы множества чисел, исходные данные к которой анализируются как матрица цифр, а решение выполняется горизонтальным или вертикальным сложением. Отличительная черта горизонтального сложения - разбиение задачи на последовательность сложения чисел. Примером горизонтального сложения является накопление суммы сложением пар чисел, что выполняется по описанным алгоритмам. В вертикальном сложении задача разбивается на последовательность подзадач обработки кодов, составленных из одноименных (с одинаковыми весами) разрядов всех чисел. Коды обрабатываются по очереди от младших к старшим разрядам вычислением количества единиц в этих кодах. Результатом подсчета количества единиц кода является разряд суммы и множество разрядов переносов в старшие разряды, учитываемых путем их включения в состав кодов этих старших разрядов. Например, при подсчете количества единиц в коде 01011101, образованном первыми разрядами восьми двоичных чисел - слагаемых, разряд суммы s = 1, а разряды переносов во второй и третий разряды р1= 0, р2 = 1 учитываются соответственно в кодах вторых и третьих разрядов чисел. Подсчет количества единиц в коде может осуществляется в заданной СС с основанием q по алгоритму перевода в ней целых чисел (рис. 1) с тем отличием, что целочисленное деление выполняется не над числом, а над количеством его единиц, равно как и в результате деления частное и остаток оцениваются по количеству полученных в них единиц. Для q=2 значение частного и остатка совпадают с количеством их единиц. Для других двоично-кодированных СС необходимо также выполнить переход к двоичному представлению цифр, т. е. подсчитать в них количество единиц в СС <f==2.

Целочисленное деление количества единиц кода на q легко выполняется при длине кода 2q-1 упорядочиванием единиц кода, т. е. их расположением подряд сначала кода. Тогда q-й разряд кода является частным от деления, а остаток образуется младшими или старшими q-1 разрядами кода соответственно при нулевом или единичном значениях частного. Для кодов большей длины описанная операция выполняется многократно над еще не обработанными разрядами кода и полученными разрядами остатков вплоть до их сведения к одному (q-1)-разрядному остатку. Определяемые при этом разряды частного составляют код частного.

В качестве примера рассмотрим подсчет количества единиц в двоично-десятичной СС (q=10) в следующем коде:

Ниже кода записывается его часть, составленная из 2q-l его первых разрядов и упорядоченная по единицам. При этом q-и (выделенный) разряд определил первый разряд частного, а его значение - разряды остатка, расположенные слева от частного. Строкой ниже разряды остатка дополняются еще необработанными разрядами кода, которые в совокупности после упорядочения единиц определяют второй (также выделенный) разряд частного и разряды остатка. Далее код частного 01, составленный из разрядов частного в произвольном порядке, и код остатка 000011111 необходимо привести к двоичной СС. Для этого в них подсчитывается количество единиц в СС q=2. Поскольку остаток является уже упорядоченным по единицам кодом, то алгоритм вычисления количества единиц упрощается исключением операций упорядочения кодов.

Таким образом, S = 00012, PI = 01012.

Целочисленное деление количества единиц на непростое число q целесообразно выполнять последовательным делением на сомножители этого числа. Например, для q=10 - делением на 2 и 5.

28. Алгоритмы умножения чисел.

Д

Таблица 4

а

b

y

0

0

О

0

1

0

1

0

0

1

1

1

ля выполнения операции умножения в ССq необходимо предварительно составить таблицу умножения. В двоичной системе таблица умножения имеет наиболее простой вид и описывает булеву функцию y=ab логического умножения, называемую также конъюнкцией (табл. 4).

Цифровое устройство, которое реализует эту функцию, называется конъюнктором (от слова конь [посвящается Алику]). Произведение двух двоичных чисел

определяется взвешенной суммой конъюнкций разрядов сомножителей:

Конъюнкции складывают матрицу размером пхп. Для n = 4 такая матрица приведена на рис. 10. Разряды сомножителей обозначены их номерами от 1 до 4, а конъюнкции -двузначными числами, составленными слева направо из номеров разрядов множимого и множителя, а для их произведения С указаны веса его разрядов от до 27.

Рис.10

Матрица имеет симметричный вид и располагает конъюнкции вдоль горизонтальных, вертикальных и наклонных линий.

Одновременное вычисление конъюнкций, которые принадлежат к одной линии и последовательный проход через все линии одного типа позволяют вычислить все конъюнкции матрицы. Последовательная обработка линий матрицы разбивает время выполнения операции на ряд одинаковых по продолжительности временных отрезков -тактов, причем для каждого типа линии существует много способов последовательно-параллельного умножения двоичных чисел, которые выполняют операцию за n или 2п тактов.

Наклонные линии содержат конъюнкции, являющиеся результатом умножения одного сомножителя на разряд другого. Накопление суммы таких результатов по тактам составляет основу для четырех способов умножения двоичных чисел. Схема алгоритма одного из них изображена на рис. 11.

Блок 2 обеспечивает ввод исходных данных: множимого А, множителя В и разрядности n. В блоке 3 устанавливается начальное значение суммы S. Блок 4 организует цикл из n итераций, выполняемых за n тактов. Тело цикла содержит блоки 5-7 и завершается блоком 8. Блок 5 реализует функцию конъюнкторов, умножающих разряды множимого А на первый, младший разряд В{1} множителя В, так как он разрешает вычисление суммы S=S+A в блоке 6 только при В{1}=1. Блок 7 сдвигает на одну позицию вправо числа В и S. При этом место младшего разряда В{1} множителя занимает его следующий разряд. Сдвиг суммы S относительно множителя А удваивает множитель А. По окончанию всех итераций блок 9 выводит сумму S, являющуюся искомым произведением. Алгоритм закончен.

Способ характеризуется выполнением операции, начиная с младших разрядов множителя В, и изменением взаимного положения чисел S и А сдвигом суммы S. Умножение чисел, начиная со старших разрядов множителя В, и два варианта изменения взаимного положения чисел S и А (сдвигом S или А в противоположную сторону) добавляют еще три способа умножения.

Переход к способам выполнения операции, начиная со старших разрядов, требует коррекции блоков 5 и 7 описанного алгоритма. В блоке 5 вместо младшего разряда В{1} множителя В анализируется его старший разряд В{п}. В блоке 7 изменяется направление сдвига чисел.

Переход к способам умножения с изменением взаимного положения чисел S и А сдвигом множимого А, требует замещения в блоке 7 описанного алгоритма оператора сдвига суммы S на оператор сдвига множимого А в противоположном направлении.

Сравнительный анализ четырех изображенных способов умножения позволяет выделить первый из них как наиболее

экономичный. Критерием сравнения может быть суммарная длина разрядной сетки чисел. Для первого способа она складывается из n разрядов неподвижного множимого А, п разрядов множителя В (его выдвигаемые разряды теряются) и n старших разрядов суммы S (ее уже вычисленные младшие разряды имеют возможность занимать высвобожденные позиции разрядной сетки множителя В). Другие способы имеют худшие показатели. Способы умножения, выполняющие сдвиг числа А, требуют удвоения его разрядной сетки. Способы умножения, выполняющие сдвиг числа, начиная со старших разрядов, не позволяют использовать высвобождаемую разрядную сетку множителя В для вдвижения разрядов суммы S по причине их возможного изменения.

В рассмотренных способах операция умножения выполняется накоплением суммы чисел, т. е. последовательно по числам и параллельно по разрядам. Группирование конъюнкций вдоль вертикальных линий матрицы порождает способы умножения чисел с вводом, обработкой и выдачей информации "цифра за цифрой", т. е. такт за тактом последовательно по разрядам. Эти способы предполагают вычисление конъюнкций и подсчет количества их единичных значений в столбцах матрицы (с учетом переносов) по мере поступления разрядов сомножителей.

Рассмотрим алгоритмы вычисления конъюнкций столбцов матрицы. На рис. 12 изображена схема алгоритма вычисления конъюнкций при вдвижении разрядов множимого А и занесении (в разрядную сетку) разрядов множителя В. Блок 2 вводит разрядность л сомножителей А{1п} и В{1п}. Блок 3 обнуляет разрядные сетки Х{1п} и Y{ln}, заполняемые за n тактов разрядами сомножителей А и В. Блок 4 организует цикл из n итераций, выполняемых за n тактов. Тело цикла содержит блоки 5-8 и завершается блоком 9. Блок 5 осуществляет ввод очередных разрядов A{i} и B{i} сомножителей А и В. Блок 6 выполняет вдвижение разряда A{i} в разрядную сетку Х и запись разряда B{i} в разрядную сетку Y. Блок 7 выполняет операцию логического умножения над соответствующими разрядами сеток Х и У вычисляя конъюнкции 1-го столбца матрицы, i=1n. Блок 8 выводит эти конъюнкции. Блок 10 организует цикл из п-1 итераций для вычисления в следующих п-1 тактах конъюнкций столбцов с (п+1)-го по (2п-1)-й. Тело цикла содержит блоки 11-13 и завершается блоком 14. В блоке 11 осуществляется вдвижение нулевого значения в разрядную сетку X. Блок 12 выполняет операцию логического умножения над соответствующими разрядами Х и У, вычисляя конъюнкции i-го столбца матрицы, i=n+l2n-l. Блок 13 выводит эти конъюнкции. Алгоритм закончен.

Вычисление всех конъюнкций матрицы выполняется за 2п-1 тактов.

На рис. 13 изображена схема алгоритма вычисления конъюнкций столбцов матрицы при поочередном вдвижении разрядов сомножителей. Блок 2 вводит разрядность n сомножителей А и В. Блок 3 обнуляет разрядные сетки Х{1-п) и Y{l-n}, заполняемые за n тактов разрядами сомножителей. Блок 4 организует цикл из я итераций, выполняемых за n тактов. В первом полутакте такта блоки 5-8 тела цикла осуществляют введение очередного разряда множимого А, его вдвижение в разрядную сетку Х со стороны младших разрядов, операцию логического умножения над соответствующими разрядами Х и Y и вывод ее результатов V. Во второй половине такта блоки 9-12 тела цикла осуществляют ввод очередного разряда множителя В, его вдвижение в разрядную сетку Y со стороны старших разрядов, выполнение операции логического умножения над соответствующими разрядами Х и У и вывод ее результатов V. При этом в первых п/2 тактах результаты равны нулю, а в

следующих тактах содержат конъюнкции первых столбцов матрицы.

Блок 13 завершает тело цикла. Блок 14 организует цикл из п/2 итераций для

вычисления в следующих п/2 тактах столбцов конъюнкций с (п+1)-то по (2n-1)-й. В первом

полутакте такта блоки 15-17 тела цикла осуществляют вдвижение нулевого значения в разрядную сетку Х со стороны младших разрядов, операцию логического умножениянад соответствующими разрядами Х и Y и вывод ее результатов V. Во второй половине такта

блоки 18-20 тела цикла осуществляют вдвижение нулевого значения в разрядную сетку Y со стороны старших разрядов, логическое умножение над соответствующими разрядами Х и Y и вывод ее результатов V. Блок 21 завершает тело цикла. Алгоритм закончен.

На рис. 14 показана схема алгоритма вычисления конъюнкций столбцов матрицы при одновременном встречном движении разрядов сомножителей. Описанный алгоритм от предыдущего отличается одновременным вычислением конъюнкций двух очередных столбцов матрицы в виде VI и VO. Вычисление всех конъюнкций матрицы выполняется, как и в предыдущем алгоритме, за п тактов (с (Е(п/2)+1)-го по Е(3п/2)-й такты), т. е. за время ввода сомножителей. Эта особенность используется для выполнения операции над непрерывным потоком сомножителей, т. е. при отсутствии пауз между поступлениями разрядов предыдущих и последующих сомножителей. Сложение единичных значений в столбцах матрицы конъюнкций выполняется по алгоритму подсчета количества единиц в коде, рассмотренному при изучении операции сложения чисел.

Группирование конъюнкций вдоль горизонтальных линий матрицы порождает способы умножения чисел, использующие последовательный ввод сомножителей, начиная с младших и старших разрядов соответственно для одного и другого числа. Вычисляемые конъюнкции смежных пар горизонтальных линий составляют числа, сложение которых определяет искомое произведение сомножителей.

Кроме последовательно-параллельных способов умножения чисел, выполняющих операцию в течение ряда тактов, широко используется матричный способ умножения, вычисляющий все конъюнкции матрицы одновременно. Сложение конъюнкций (с учетом их весов) осуществляется на сумматорах и полусумматорах без разбиения времени выполнения операции на такты.

Умножение чисел в обратном или дополнительном кодахпредполагает коррекцию результата, определяемую разностью обратного (дополнительного) кода произведения и произведения обратных (дополнительных) кодов сомножителей. Для ее вычисления рассматриваются сочетания различных значений знаковых разрядов чисел.

Например, при умножении обратных кодов Аоб, Воб, чисел А>=0 и В<=0 необходимо получить обратный код Соб произведения С=АВ (С<=0) с введением коррекции Коб = Соб - Аоб • Воб.

Учитывая, что для А>=0 Аоб = А, а для В<=0 С<=0 Boб=2n-1-|B| и Cоб=22n-1-|C|, то Коб= A2n + А+2А.

Следовательно, при указанных значениях знаков сомножителей произведение обратных кодов корректируется путем сложения с ним сдвинутой на одну позицию величины А и ее инверсии непосредственно и со сдвигом на л позиций (сдвиги выполняются в сторону старших разрядов).

Рассмотрим пример умножения дополнительных кодов Адп и Bдп чисел А<0 и В<0. В этом случае дополнительный код Сдп произведения С=АВ, С>0 совпадает с его прямым кодом и Сдп=|С| а величина коррекции Kдп=Cдп - AдпBдп с учетом равенств Aдп=2n-|A| и Bдп=2n-|B| приводится к виду Кдп=2n(A+B)дп.

Следовательно, в данном примере произведение дополнительных кодов сомножителей следует увеличить на дополнительный код их суммы, сдвинутый в сторону старших разрядов на n позиций.

Умножение чисел в двоично-десятичной СС сводится к последовательному сложению частных произведений, получаемых при умножении множимого на очередную цифру множителя.

Умножение десятичных чисел выполняется по методу ускорения, в котором все операции сводятся к последовательности операций сложения или вычитания в обратном или дополнительном кодах. В табл. 5 для каждого значения цифры множителя показаны операции над накапливаемой суммой S и множимым А, а также значение адресуемого в следующую тетраду переноса.

Рассмотренные способы умножения выполняют операцию над числами в естественной форме представления.

Умножение чисел с плавающей точкой выполняется с сохранением единого формата для операндов и результата операции. Поэтому над n-разрядными мантиссами выполняется умножение с вычислением округленного n-разрядного произведения, для чего используется метод сокращенного умножения. Порядок результата вычисляется сложением порядков сомножителей. Возможна нормализация мантиссы результата ее сдвигом на одну позицию в сторону старших разрядов и уменьшением порядка на единицу.

М

Таблица 5

Цифра множимого

Значения суммы

Перенос

0

S=S+0

0

1

S=S+A

0

2

S=S+2A

0

3

S=S+2A+A

0

4

S=S+4A

0

5

S=S+4A+A

0

6

S=S-4A

1

7

S=S-2A-A

1

8

S=S-2A

1

9

S=S-A

1

етод сокращенного умножения основывается на анализе матрицы конъюнкций произведения двух нормализованных мантисс А{1п}, В{1п}. Матрица разбивается на две части: младшую, объединяющую k младших столбцов, исключаемых из вычислений, и старшую, по которой находится усеченное произведение V{l2n-k}. Величина k = n - ]log2(n+2)[ определяется из условия несущественного влияния младшей части матрицы на округленный результат V{1n}, составленный из л старших разрядов усеченного произведения.

V{1n}=V{12n-k} -V{n+12n-k}, где V{n+l2n-k}, - отбрасываемые разряды усеченного произведения. На рис. 15 показано разбиение матрицы на младшую и старшую части, полное и усеченное произведения, а также округленный результат для п=8, k=5. Разряды сомножителей нумеруются от первого, старшего разряда до младшего. Конъюнкции матрицы обозначаются двухразрядными числами, составленными из номеров перемножаемых разрядов сомножителей.

Метод направлен на снижение объема вычислений, например, для чисел с разрядностью 16 и 32 необходимо вычислять и складывать конъюнкции 20 и 37 старших столбцов вместо 31 и 63. Это существенно упрощает операцию умножения и обеспечивает для матричных устройств почти вдвое уменьшение затрат оборудования и повышение быстродействия.

29. Алгоритмы деления чисел.

Операция деления выполняется над двумя числами:делимым А и делителем В и определяет результат также в виде двух чисел - частного С и остатка D, для которых A=B*C+D и |D|<B. Как правило, операция деления реализуется многократным вычитанием делителя В из делимого А, то осуществляется сложением чисел в обратном или дополнительном кодах.

Один из наиболее простых способов деления описывается алгоритмом последовательного вычитания, показанным на рис. 16. Блок 2 вводит делимое А и делитель В - целые положительные числа. Блок 3 присваивает частному С исходное нулевое значение. Блок 4 сравнивает числа А и В. Если условие А<В не выполняется, управление передается блоку 5, который уменьшает число А на величину В. Блок 6 увеличивает значение частного С на единицу и передает управление блоку 4. Далее при выполнении условия А<В блок 7 выводит частное С и остаток, полученный в А. Алгоритм закончен.

Описанный способ выполняет целочисленное деление, отличительной чертой которого является использование условия |D|<B в качестве признака завершения операции. Целочисленное деление, как правило, используется для выполнения операций над числами в естественной форме представления.

Числа с плавающей точкой обрабатываются с использованием точностного деления, выполняемого над нормализованными мантиссами чисел. Точностное деление мантисс определяет частное с заданным количеством разрядов, а остаток игнорируется или используется для уточнения частного на единицу младшего разряда. Наиболее распространенными способами точностного деления являются способы деления с восстановлением и без восстановления остатка.

Деление с восстановлением остатка иллюстрируется алгоритмом, показанным на рис. 17. Блок 2 вводит делимое А и делитель В - нормализованные мантиссы двоичных чисел с плавающей точкой, а также количество разрядов п частного. Блок 3 организует цикл из я +1 итераций. Тело цикла содержит блоки 4-9 и завершается блоком 10. Блок 4 уменьшает число А на величину В. Блок 5 анализирует уменьшенное число А и при А^О передает управление блоку 6, который выводит единичное значение цифры частного. 1^сли условие А>0 не выполняется, то управление передается блоку 7, осуществляющему вывод нулевого значения цифры частного. Блок 8 восстанавливает уменьшенное число А до значения, которое имело место в начале итерации. Восстановление выполняется операцией сложения, которая является обратной к операции блока 4. Блок 9 удваивает значение числа А путем его сдвига на одну позицию в сторону старших разрядов. Алгоритм закончен.

Описанный способ обеспечивает последовательное, т. е. "цифра за цифрой", вычисление п+1 разрядов частного, начиная со старшего разряда. Причем полученное число является нормализованной n-разрядной мантиссой результата, если А < В. В противном случае число содержит в себе единицу целой части и приводится к нормализованному виду сдвигом на одну позицию в сторону младших разрядов. При этом теряется младший из вычисленных разряд мантиссы частного и увеличивается на единицу порядок результата, определяемый разностью порядков делимого и делителя.

На рис. 18 показан алгоритм деления без восстановления остатка. Этот алгоритм отличается от предыдущего заменой последовательности действий по восстановлению числа А, его удвоению и вычитанию величины В (блоки 8, 9 и 4 на рис. 17), на последовательность действий удвоения числа А и увеличения его на число В (блоки 8 и 5 на рис. 18), что дает один и тот же результат: 2А+В. В каждой итерации цикла, организуемого блоком 4, вычисляется разряд Р частного, равный инверсии знака числа А, вычисленного в блоке 5. Этот блок увеличивает или уменьшает число А в зависимости от предыдущего соответственно единичного или нулевого значения разряда Р. Начальное нулевое значение радряда Р задаваемое в блоке 3, соответствует выполнению операции над положительными числами. Для чисел с произвольными знаками исходное значение Р, как и знак sign(C) частного С, определяется сложением по модулю два знаков делимого и делителя, а в блоке 6 значение Р вычисляется так:

Р = sign(A) sign(C).

При этом частное выдается в обратном коде при сложении по модулю два вычисленного значения Р со знаком делителя В. Алгоритм закончен.

В качестве примера, рассмотрим выполнение операции деления в обратном коде над числами 5 и 3, взятыми с различными знаками и представленными в форме с плавающей точкой в двоичной СС:

Точностные алгоритмы деления могут использоваться для целочисленного деления путем выбора количества итераций из условия получения целого остатка. Принципы деления чисел без восстановления остатка распространяются на способы выполнения операций в других СС, в частности в двоично-кодированных СС. На рис. 19 изображена схема алгоритма деления чисел в двоично-десятичной СС. Блок 2 вводит делимое А и делитель В -нормализованные мантиссы чисел, представленные в двоично-десятичной СС, а также количество разрядов л частного. Блок 3 устанавливает начальное значение десятичной цифры частного С и переменной Р, определяющей способы вычисления цифры С. Блок 4 организует цикл из л итераций. Тело цикла содержит блоки 5-9. В блоке 5 число А при Р==0 уменьшается на величину В. Блок б сравнивает уменьшенное число А с нулем и при выполнении условия А>0 (Р=0) обеспечивает увеличение (в блоке 7) цифры С на единицу. Далее блоки 5 и 6 повторяются и при невыполнении условия А>0 управление передается блоку 8, осуществляющему вывод вычисленной цифры частного С. Блок 9 осуществляет сдвиг числа А на одну тетраду в сторону старших разрядов, инвертирует переменную Р и определяет исходное значение следующей цифры частного С: С=0 для Р=0 и С=9 для Р=1. В новой итерации (для С=9 и Р=Т) блок 5 увеличивает число А на В. В блоке 6 числоА сравнивается с нулем и при выполнении условия А>0 цифра С уменьшается (в блоке 7) на единицу. Невыполнение условия в блоке 6 свидетельствует о завершении формирования цифры С. Блок 8 осуществляет ее вывод, а блок 9 подготавливает выполнение следующей итерации. Алгоритм закончен.

30. Выполнение арифметических операций над числами с плавающей точкой

В ВУ с плавающей точкой мантиссы чисел обрабатываются с сохранением единых форматов представления операндов и результатов, с одной стороны, и с использованием операции умножения, удваивающей разрядность произведения по сравнению с разрядностью сомножителей, с другой стороны. Это для мантисс чисел определяет операции над n-разрядными операндами с вычислением округлённых n-разрядных результатов, т.е. с потерей n младших разрядов полного n-разрядного результата. Такие операции в однотактных ВУ целесообразно выполнять с сокращением вычислений. Разряды мантисс нумеруются от первого старшего разряда к младшему.