Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по Архитектуре и организации ЭВМ.doc
Скачиваний:
128
Добавлен:
20.06.2014
Размер:
6.09 Mб
Скачать

Деление в дополнительном (обратном) кодах со сдвигом и автоматическим восстановлением остатка

[X]дк,ок; [Y]дк,ок

Деление в ОК не применяется, так как "0" в ОК имеет двойное изображение. В первом такте вместо sign i-1берётся sign X, а вместо 2i-1берётся [X]дк,ок

Пример:

[X]дк= 1.0111

[Y]дк= 1.0011

Т.к. sign X = sign Y,то

+1.0111 | 1.0011

0.1101 = -[Y]дк

______

0.0100 = 0 = [X]дк + [-[Y]дк ]дк , sign 0 sign Y, то z0 = 0

20 = +0.1000

Т.к. sign 0 sign Y, то

1.0011 = [Y]дк

______

1.1011 = 1 = 20 + [Y]дк , т.к. sign 1 = sign Y, то z1 = 1

21 = +1.0110

Т.к. sign 1 = sign Y, то

0.1101 = +[-[Y]дк ]дк

______

0.0011 = 2 = 2 1 + [-[Y]дк ]дк , т.к. sign 2 sign Y, то z2 =0

22 = +0.0110

Т.к. sign 2 sign Y, то

1.0011 = [Y]дк

______

1.1001 = 3 = 2 3 + [Y]дк , т.к. sign 3 = sign y, то z3 = 1

23 = +1.0010

Т.к. sign 3 = signY, то

0.1101 = +[-[Y]дк ]дк

______

1.1111 = 4 = 2 3 + [-[Y]дк ]дк , т.к. sign 4 = sign Y, то z4 = 1

Ответ: [Z]дк= 0.1011

Это справедливо при 1 [Z]дк= [X]дк/ [Y]дк]| < 1.

Если необходимо определить частное |[Z]дк= [X]дк/ [Y]дк| | < 2, то поступают так:

[X]дк*2-1/ [Y]дк= z0z1z2...zn, z0– знак, z1– целая часть числа.

Арифметические операции над числами, представленными с плавающей запятой

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

Будем условносчитать, что порядки заданы в обратном коде, а мантиссы – в прямом.

Умножение:

X = 2mx* sign X.x1x2...xn

Y = 2my * sign Y.y1y2...yn

Z = X*Y = 2mx+my * sign Z.z1z2...zn

Порядок выполнения операции следующий:

  1. Знак произведения находится так же, как и при умножении чисел с фиксированной запятой:

  2. Порядок произведения находится алгебраическим суммированием порядков мно­жимого и множителя.

  3. Мантисса находится по правилам умножения чисел с фиксированной запятой.

При этом возможны следующие случаи:

  • Мантисса произведения – ненормализованное число, так как

  • ½ |Mx| < 1,

  • ½ |My| < 1, то

  • ¼ |Mx*My| < 1, при ¼|Mx*My| < ½

  • имеем ненормализованное число.

Поэтому необходима нормализация влево максимум только на один разряд.

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

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

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

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

Деление

В основном аналогично умножению:

X = 2mx * sign X.x1x2...xn

Y = 2my * sign Y.y1y2...yn

Z = X/Y = 2mx–my * sign Z.z1z2...zn

Порядок выполнения операции следующий:

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

  2. Порядок частного находится как разность порядков делимого и делителя.

  3. Цифры частного находятся так:

вначале находится целая часть мантиссы, то есть |Mx| - |My| =0

Если 00, то z0= 1, если0< 0, то z0= 0.

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

½ |Mx| < 1,

½ |My| < 1,

2-1< |Mx/ My| < 2

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

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