Пример деления чисел с фиксированной запятой

1. Выполнить операцию деления заданных чисел А и В со всеми комбинациями знаков, используя метод деления в дополнительных кодах. Для представления делимого (А) использовать 16 двоичных разрядов (один-знаковый,15-цифровых), для представления делителя (В) – 8 разрядов (один-знаковый,7-цифровых). Остаток от деления и частное представляются в той же разрядной сетке, что и делитель.

2. Результаты операции представить в десятичной системе счисления и проверить их правильность.

А = 139, В = 13.

[A]пр. = 0.010001011, [A]доп = 1.101110101;

[В]пр. = 0.1101, [В]доп = 1.0011.

.

а) А<0, B<0.

  N шага   Операнды Действия   Комментарии
Делимое/остаток (старшие разряды) Делимое/остаток (младшие разряды)
  [A]доп 1 1 0 1 1 1 0 1 0 1 Делимое
  ←[A]доп [-B]пр R1 +1 0 1 1 1 0 1 1 0 1 0 0 1 0 0 0 1 0 1¦ 0 0 1 0 1¦ 0 Сдвиг А. Вычитание В. Деление корректно.
  ←R1 [B]доп R2 +0 1 0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0¦ 0 1 0 1 0¦ 1 Сдвиг остатка влево. Сложение с В. Формирование цифры частного.
  ←R2 [-B]пр R3   +1 0 1 1 1 0 1 1 0 1 0 0 1 0 0 0 1¦ 0 1 0 0 1¦ 0 1 0 Сдвиг остатка влево. Вычитание делителя. Формирование цифры частного.
  ←R3 [B]доп R4   +0 1 0 0 0 1 0 0 1 1 1 1 0 1 1 1¦ 0 1 0 0 1¦ 0 1 0 1 Сдвиг остатка влево. Сложение с В. Формирование цифры частного.
  ←R4 [-B]пр R5   +1 0 1 1 1 0 1 1 0 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 Сдвиг остатка влево. Вычитание делителя. Формирование цифры частного.
  [B]доп   R6 1 0 0 1 1 1 0 1 1 1     0 1 0 1 0 Коррекция остатка: сложение с делителем Результат

В результате выполнения операции получено положительное частное:

[C]пр = (0.1010)2 = (+10)10

и отрицательный остаток

[B]доп = (1.0111)2 = (-9)10,

которые соответствуют значениям:

10·(-13) + 9 = -139.

а) А<0, B>0.

  N шага   Операнды Действия   Комментарии
Делимое/остаток (старшие разряды) Делимое/остаток (младшие разряды)
  [A]доп 1 1 0 1 1 1 0 1 0 1 Делимое
  [B]пр [-B]пр R1 0 0 0 0 0 1 1 1 0 0 +1 1 0 0 0 0 1 1 0 1 0 0 1 0 1 0 1 1 0 1 0 0 0 1 0 0 0 1 0¦ 0 0 0 1 0¦ 1 Сложение с делителем, выровненным по младшим разрядам. Сдвиг остатка влево. Сложение с делителем, выровненным по старшим разрядам. Деление корректно.  
  ←R1 [-B]доп R2 +0 1 0 1 0 1 0 0 1 1 1 1 1 0 1 0 1 0¦ 1 0 0 1 0¦ 1 0 Сдвиг остатка влево. Вычитание делителя. Формирование цифры частного.
  ←R2 [B]пр R3   +1 1 0 1 0 0 1 1 0 1 0 0 1 1 1 1 0¦ 1 0 0 1 0¦ 1 0 0 Сдвиг остатка влево. Сложение с В. Формирование цифры частного.
  ←R3 [-B]доп R4   +0 1 1 1 1 1 0 0 1 1 0 0 0 1 0 0¦ 1 0 1 0 0¦ 1 0 1 1 Сдвиг остатка влево. Вычитание делителя. Формирование цифры частного.
  ←R4 [-B]доп R5   +0 0 1 0 0 1 0 0 1 1 1 0 1 1 1 1 0 1 1 0 1 0 1 1 0 Сдвиг остатка влево. Вычитание делителя. Формирование цифры частного.

В результате выполнения операции получено отрицательное частное:

[C]доп = (1.0110)2 = (-10)10

и отрицательный остаток

[B]доп = (1.0111)2 = (-9)10,

которые соответствуют значениям:

(-10)·13 + (-9) = -139.

Особый случай алгоритма

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

[А]пр = (-168)10 = (1.0101000)2 [В]пр = (-14)10 = (1.1110)2

[А]доп = (1.1011000)2 [В]доп = (1.0010)2

  N шага   Операнды Действия   Комментарии
Делимое/остаток (старшие разряды) Делимое/остаток (младшие разряды)
  [A]доп 1 1 0 1 0 1 1 0 0 0 Делимое
  ←[A]доп [-B]пр R1 +1 0 1 0 1 0 1 1 1 0 0 0 0 1 1 1 0 0 0¦ 0 1 0 0 0¦ 0 Сдвиг делимого влево. Вычитание делителя. Деление корректно.
  ←R1 [B]доп R2 +0 0 1 1 1 1 0 0 1 0 1 1 0 0 1 0 0 0¦ 0 0 0 0 0¦ 0 1  
  ←R2 [-B]пр R3   +1 0 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0¦ 0 1 0 0 0¦ 0 1 0  
  ←R3 [B]доп R4   +0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0¦ 0 1 0 0 0¦ 0 1 0 0  
         

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: