Смекни!
smekni.com

Выполнение операций умножения и деления в ЭВМ (стр. 3 из 4)

|А|<|В|

где А - делимое, В - делитель. Кроме того: В¹0.

Известны два основных алгоритма выполнения операции деления:

- деление с восстановлением остатков ;

- деление без восстановления остатков.

5.1 Деление чисел с восстановлением остатков

Пусть необходимо разделить А на В. Тогда частное от деления


Yi=А/В = 0,у1у2у3... уі-1уі= у1 2-1 22-2 32-3 ... уі-12-і -1і2 (1.1.)

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

0 ≤ А - ВYi ≤ В2

т.е. остаток от деления должен быть меньше делителя, умноженного на 2, или:

0 ≤ (А - ВYi )2і ≤ В, обозначим (А - ВYi ) 2і =Rі и получим:

0 ≤ Rі ≤ В. (1.2)

При делении цифры частного определяются последовательно, начиная со старшего разряда. Допустим, что в результате выполнения і циклов получены старшие і разрядов частного, т.е. приближенное значение частного Yi. В следующем (і+1)-цикле будет получено значение (і+1)-го разряда частного. Исходными данными для этого цикла являются Yi и Rі.

Цифра уі+1 может иметь одно из двух значений:

1 или 0. Если уі+1=0, то

Yі+1= Yі+ уі+1х 2-(і+1)=Yі; (1.3.)

Rі+1=(А-ВYі+1) х 2і+1= 2 Rі, (1.4.)

т.е. в частном записывается 0 при условии 0 ≤ Rі+1=2Ri< В. (1.5.)

Если уі+1=1, то Yі+1= Yі+ 2-(і+1); (1.6.)

Rі+1=(А-Вх Yі+1) х 2і+1= (А - В х Yi-B х 2-(і+1) 2(і+1)=2 Rі- В, (1.7.)

т.е. цифра частного равна 1, если выполняется условие:

0 ≤ Rі+1=2Ri -В < В (1.8.)

или В ≤ 2Ri< 2В. (1.9.)

Так как всегда выполняется одно из условий (1.5.) или (1.9.), то для определения текущей цифры частного достаточно проверить одно из них.

Обычно проверяют условие (1.5.). Левая часть этого неравенства выполняется заведомо, так как согласно (1.2.) 0 ≤ Rі, то есть очередной остаток перед началом следующего шага деления всегда является положительным числом.

Для проверки правой части неравенства сравним разность (2Rі-В) сравним с нулем. Если эта разность окажется отрицательной, то в (і+1) разряд частного запишем 0 и для подготовки исходных данных для (і+2)-го цикла определим Rі+1 следующим образом:

Rі+1=(2Ri -В) + В =2Ri . (1.10.)

Если разность 2Ri -В окажется положительной, то запишем в (і+1) разряд частного 1, а в качестве исходного значения для следующего (і+2)-го цикла используем вычисленную разность (см. 1.7.): Rі+1=2 Rі- В,

Исходными данными для 1-го цикла являются:

Y0=0

R0=(А-ВY0)20= А< В

т.е. по условию неравенства (1.2.) выполняется и перед началом первого цикла. После окончания n-го цикла получим n-значное частное Yn, вычисленное с недостатком Rn=(A - BYn)2n,который равен остатку от деления А на В, сдвинутому влево на n разрядов.

Правило деления с восстановлением остатков формулируется следующим образом.

Делитель вычитается из делимого и определяется знак нулевого (по порядку) остатка. Если остаток положительный, т.е. |A|>|В|, то в псевдознаковом разряде частного проставляется 1, при появлении которой формируется признак переполнения разрядной сетки и операция прекращается. Если остаток отрицательный, то в псевдознаковом разряде частного записывается 0, а затем производится восстановление делимого путем добавления к остатку делителя. Далее выполняется сдвиг восстановленного делимого на один разряд влево и повторное вычитание делителя. Знак получаемого таким образом остатка определяет первую значащую цифру частного: если остаток положителен, то в первом разряде частного записывается 1, если отрицательный, то записывается 0. Далее, если остаток положителен, то он сдвигается влево на 1 разряд и из него вычитается делитель для определения следующей цифры частного. Если остаток отрицателен, то к нему прибавляется делитель для восстановления предыдущего остатка, затем восстановленный остаток сдвигается на 1 разряд влево и от него вычитается делитель для определения следующей цифры частного и т.д. до получения необходимого количества цифр частного с учетом одного разряда для округления, т. е. до обеспечения требуемой точности деления.

Пример.

А=0,10011; В=0,11001; [-B]доп= 11,00111; |В|= 0,11001

1. Определение знака частного: 0Å0=0 2. Определения модуля частного

№ цикла № такта Наименование операции Дей-ствие Разряды частного
0 1 Вычит. делит. А 00 10011
2 из делимого [-B]д 11 00111
R0 11 11010 0, 1 1 0 0
3 Восстановл. 00 11001
0-остатка R1 1 00 10011
1 1 Сдвиг остатка ¬R1 01 00110
2 Вычит. делит. [-B]д 11 00111
формирование R2 1 00 01101
разряда частн.
2 1 Сдвиг остатка ¬R2 00 11010
2 Вычит. делит. [-B]д 11 00111
формирование R3 1 00 00001
разряда частн.
3 1 Сдвиг остатка ¬R3 00 00010
2 Вычит. делит. [-B]д 11 00111
формирование 11 01001
разряда частн.
3 Восстан. ост. 00 11001
R4 1 00 00010
4 1 Сдвиг остатка ¬R4 00 00100
2 Вычит. делит. [-B]д 11 00111
формирование 11 01011
разряда частн.
3 восстановл. ост 00 11001
1 00 00100

С=0,1100

Таким образом, цифры частного получаются как инверсное значение знаковых разрядов текущего остатка, которые принимают значение 00 или 11. Однако при сдвиге остатка влево в знаковых разрядах может возникнуть сочетание 01. В некоторых случаях, для того чтобы цифры частного формировались как прямое значение знакового разряда текущего остатка, деление выполняют с инверсными знаками. При этом делимое передается в сумматор не прямым, а инверсным кодом, а на нулевом шаге выполняется операция «+В», вместо операции «—В».

5.2 Деление без восстановления остатков

Рассмотренный способ деления с восстановлением остатков является аритмичным процессом с переменным числом шагов того или иного вида в каждом конкретном случае (3 шага при 2Ri < В и 2 шага при 2Ri>B). Для ритмизации процесса на каждую цифру частного необходимо затратить по 3 шага, в результате чего увеличивается время выполнения операции. Вместе с тем, операцию можно упростить и получить каждую цифру частного за 2 шага.

Рассмотрим случай, когда Ri <0. В предыдущем способе в этом случае выполнялись следующие операции.

Восстановление остатка:

R’і= 2 Rі +|В|=2 Rі-1-|B|+|B|=2 Rі-1

Сдвиг восстановленного остатка влево:

¬R'i = 2 R'i = 2 Ri-1 х 2 = 4 Ri-1.

Вычитание модуля делителя из восстановленного и сдвинутого влево остатка для определения следующего остатка:

Rі+1 =4 Rі-1-|B|

Если не восстанавливать остаток, а сразу сдвинуть отрицательный Rі на один разряд влево, то получим

R’і+1= 2 Rі =2(2 Rі-1-|B|)=4Rі-1 - 2 |B|.

Результат в данном случае отличается от действительного на величину + |B|. Поэтому в качестве второго шага необходимо произвести коррекцию результата на эту величину:

Rі+1 =4 Rі-1-2|B|+|B=4 Rі-1-|B|

В результате получаем требуемую величину последующего остатка Rі+1, за 2 шага.

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

Пример

Заданы А=0,101; В=0,110 [-B]доп= 11,010; |В|= 0,110

1. Определение знака частного: 0Å0=0 2. Определения модуля частного

№ цикла № такта Наименование операции Действие Разряды частного
0 Вычит. делит. А 00 101
из делимого [-B]д 11 010
R0 11 111 0, 1 1 0 0
1 1 Сдвиг остатка ¬R0 11 110
2 Прибавление 00 110
формирование R1 1 00 100
разряда частн.
2 1 Сдвиг остатка ¬R1 01 000
2 Вычит. делит [-B]д 11 010
формирование R2 1 00 010
разряда частн.
3 1 Сдвиг остатка ¬R2 00 100
2 Вычит. делит. [-B]д 11 010
формирование R3 11 110
разряда частн.
4 1 Сдвиг остатка ¬R3 11 100
2 Прибавл. дел. +B 00 110
формирование 00 010
разряда частн.

С=0,1100