Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
с. работа - Логика.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
2.16 Mб
Скачать

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

Деление в ЭВМ, так же, как и умножение, проще всего выпол­нять в прямом коде. Но в отличие от умножения дробных сомножи­телей, где не может возникнуть переполнение разрядной сетки, при делении правильных дробей такое переполнение возможно в случае, когда делимое больше делителя. Признаком переполнения является появление единицы в знаковом разряде частного, что грубо искажает результат.

Знак частного при делении в прямом коде определяется как сумма по модулю 2 знаковых цифр делимого и делителя и присваивается частному в конце операции деления.

Частное определяется путем деления модулей исходных чисел. При этом во избежание переполнения разрядной сетки должно соблю­даться условие: | А |< | В |, где А — делимое; В — делитель.

Пусть требуется разделить A на В с точностью до i-го разряда.

Тогда

Yi = A/B = 0, у1 y2 y3 … yi-1 yi= у12 - 1 + y22 - 2 ++ yi-12- (i-1) +yi2 - i . (4.19)

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

0A - ВYi<В 2 - i, (4.20)

т. е. остаток ог деления (А — ВYi) должен быть меньше делителя, умноженного на 2- i.

Преобразуем (4.20) к виду

0≤ (A - ВYi) 2- i <B. (4.21)

Обозначив (A — ВYi ) •2 i = Ri, получим

0≤ Ri <B. (4.22)

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

Цифра yi+1 может иметь одно из двух значений: 1 или 0. Если yi+1 = 0, то

Yi+1 = Yi + yi+1•2 -(i+1) = Yi (4.23)

Ri+1 = (A-B Yi+1)•2 i+1 = 2Ri (4.24)

т. е. в частном записывается 0 при условии

0 Ri+1 =2Ri <B. (4.25)

Если yi+1 = 1, то

Yi+1 = Yi + 2 -(i+1) (4.26)

Ri+1 = (A-B• Yi+1)•2 i+1 = (A-B Yi -B•2 -(i+1))•2 i+1 = 2Ri -B (4.27)

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

0 Ri+1 =2Ri –В <B. (4.28)

или

В 2Ri <2B (4.29)

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

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

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

Ri+1 =(2Ri -B)=2Ri (4.30)

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

Ri+1 =2Ri -B

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

R0 =(A-B Y0 )•2 0 = A<B,

т. е. по условию неравенство (4.22) выполняется и перед началом первого цикла. После завершения

n-го цикла мы получим n- значное

Пример. Заданы A = 0,101; В =0,110, [В] ДМ = 11,010. Найти Y = А/В.

Определение знака частного и дополнения делители до двух:

Sg (Y)=0+0 = 0

A 00 1 0 1 CM

+B ДМ 11 0 1 0 Pr B PrY

11 1 1 1 CM 0

+| B | 00 1 1 0

  1. 1 0 1 CM

  2. 0 1 0 CM PrY

+B ДМ 11 0 1 0

00 1 0 0 CM 1

01 0 0 0 CM 01 PrY

+B ДМ 11 0 1 0 CM 01 1

00 0 1 0 CM Pr

00 1 0 0 CM 011 Pr

+B ДМ 11 0 1 0 011 0

  1. 1 1 0

 | B | 00 1 1 0

00 1 0 0 CM 0110 PrY

01 0 0 0 CM

11 0 1 0 CM

+B ДМ 00 0 1 0 0110 1 PrY

Округление: + 1

0111 0

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

Y=0,111.

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

частное Yп вычисленное с недостатком Rп = (А — В Yп) • 2n, который равен остатку от деления А на В, сдвинутому влево на п разрядов.

Таким образом, правило деления с восстановлением остатков формулируется следующим образом. Делитель вычитается из делимого и определяется знак нулевого (по порядку) остатка. Если остаток положительный, т. е. | А | > | В |, то в псевдознаковом разряде частного проставляется 1, при появлении которой формируется при­знак переполнения разрядной сетки и операция прекращается. Если остаток отрицательный, то в псевдознаковом разряде частного запи­сывается 0, а затем производится восстановление делимого путем добавления к остатку делителя. Далее выполняется сдвиг восстанов­ленного делимого на одни разряд влево и повторное вычитание делителя. Знак получаемого таким образом остатка определяет первую значащую цифру частного: если остаток положителен, то в первом разряде частного записывается 1, если отрицательный, то записывает­ся 0. Далее, если остаток положителен, то он сдвигается влево на 1 разряд и из него вычитается делитель для определения следующей цифры частного. Если остаток отрицателен, то к нему прибавляется делитель для восстановления предыдущего остатка, затем восстанов­ленный остаток сдвигается на 1 разряд влево и от него вычитается делитель для определения следующей цифры частного и т. д. до полу­чения необходимого количества цифр частного с учетом одного разря­да для округления, т. е. до обеспечения требуемой точности деления. Таким образом, цифры частного получаются как инверсное значе­ние знаковых разрядов текущего остатка, которые принимают значе­ние 00 или 11. Однако при сдвиге остатка влево в знаковых разрядах может возникнуть сочетание 01. В некоторых случаях для того чтобы цифры частного формировались как прямое значение знакового раз­ряда текущего остатка, деление выполняют с инверсными знаками. При этом делимое передается в сумматор не прямым, а инверсным кодом, а на нулевом шаге выполняется операция «+В», вместо опе­рации « — В».