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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

Деление в ОК не применяется, так как "0" в ОК имеет двойное изображение. В первом такте вместо sign i-1 берётся sign X, а вместо 2 i-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

2 0 = +0.1000

Т.к. sign 0 sign Y, то

1.0011 = [Y]дк

______

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

2 1 = +1.0110

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

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

______

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

2 2 = +0.0110

Т.к. sign 2 sign Y, то

1.0011 = [Y]дк

______

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

2 3 = +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...xnY = 2my * sign Y.y1y2...ynZ = X*Y = 2mx+my * sign Z.z1z2...zn Порядок выполнения операции следующий: 1. Знак произведения находится так же, как и при умножении чисел с фиксированной запятой:
  1. Порядок произведения находится алгебраическим суммированием порядков мно­жимого и множителя.
3. Мантисса находится по правилам умножения чисел с фиксированной запятой. При этом возможны следующие случаи: o Мантисса произведения – ненормализованное число, так как o ½ |Mx| < 1,o ½ |My| < 1, то o ¼ |Mx*My| < 1, при ¼ |Mx*My| < ½ o имеем ненормализованное число. Поэтому необходима нормализация влево максимум только на один разряд. С этой целью нужно сдвинуть мантиссу влево на один разряд. Это соответствует умножению числа на 21. Для того чтобы число не увеличилось в два раза, нужно из порядка вычесть единицу. o При умножении двух чисел в силу ограниченности разрядной сетки можно получить число, которое не может быть в ней представлено. Это соответствует получению машинной бесконечности. В данном случае вырабатывается специальный признак, по которому дальнейшие вычисления прекращаются. o При умножении двух чисел можно получить минимальное число, которое также не может быть представлено в разрядной сетке. Это соответствует случаю, когда получаемое число должно быть интерпретировано как нуль. Деление В основном аналогично умножению: X = 2mx * sign X.x1x2...xnY = 2my * sign Y.y1y2...ynZ = X/Y = 2mx–my * sign Z.z1z2...zn Порядок выполнения операции следующий:
  1. Находится по известным правилам знак частного.
  2. Порядок частного находится как разность порядков делимого и делителя.
3. Цифры частного находятся так: вначале находится целая часть мантиссы, то есть |Mx| - |My| = 0 Если 0 0, то z0 = 1, если 0 < 0, то z0 = 0. Дробная часть мантиссы находится так же, как при операциях над числами с фиксированной запятой. Такой порядок действий вытекает из того, что: ½ |Mx| < 1,½ |My| < 1,2-1 < |Mx / My| < 2 То есть, возможно получение ненормализованной мантиссы. Для нормализации мантиссу необходимо сдвинуть вправо на один разряд и, чтобы не уменьшать при этом результат в два раза, нужно прибавить к порядку одну единицу. При делении, так же, как и при умножении, возможно получение кода машинного нуля и кода бесконечности.

 

Сложение и вычитание

Обе операции выполняются по сходным алгоритмам.

X = 2mx * sign X.x1x2...xnY = 2my * sign Y.y1y2...ynZ = X ± Y = 2max(mx,my).sign Z.z1z2...zn

Операция выполняется следующим образом:

  1. Находится разность порядков: mx – my = Δ
  2. Производится выравнивание порядков, при этом если разность порядков положительна, то в качестве порядка результата берётся mx, а мантисса My сдвигается вправо на |mx– my| разрядов; еcли разрядность порядков отрицательна, то денормализуется мантисса Mx.
  3. Производится алгебраическое суммирование мантисс слагаемых.
  4. Выполняется нормализация влево или вправо на соответствующее число разрядов с необходимым исправлением порядка.

Пример:

порядок мантисса[mx]пк = 0.11 [Mx]пк = 0.1010[my]пк = 0.10 [My]пк = 0.1110Находим разность порядков: +00.11 = [mx]мок 11.01 = [-my]мок 1| 00.00 |_ _ 1 00.01 = [Δ]мок - разность порядковТак как m x > my, то: +00.1010 = [Mx]мок 00.0111 = [My]мок * 2-1[Z]мок = 01.0001 – переполнение 2-1 * [Z]мок = 00.1000 – нормализация max(mx,my) = [mx]мок = +00.11 [1]мок = 00.01 [mx]мок = 01.00 – переполнение порядкаZ = ∞

При выполнении операции сложения возможны следующие специфические случаи, называемые блокировками:

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

В качестве результата берётся максимальное число.

Пример:

[mx]ок = 0.101 [Mx]ок = 0.10111101[my]ок = 1.001 [My]ок = 0.10000001

Разность порядков:

+00.101 = [mx]мок 00.110 = [-my]мок

[Δ]мок = 01.011 – то есть это число 11 10, а в разрядной сетке мантиссы только 8 разрядов.

Поэтому операция блокируется, а результатом является число:

[mx] = 0.101 [Mx] = 0.10111101

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

Пример:

[mx]ок = 1.010 [Mx]ок = 1.10101011[my]ок = 0.110 [My]ок = 1.11111111

Разность порядков:

+ 11.010 = [mx]мок 11.001 = [-my]мок _______+1| 10.011 1 _______ 10.100 = [Δ]мок

То есть разность порядков меньше (-8).

Операция блокируется, а результатом будет число:



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 565; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.83.150 (0.011 с.)