Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Деление в прямом коде со сдвигом и автоматическим восстановлением остатка



  1. Если , то z0 = 1 и ( z0 – целая часть результата).

Если , то z0 = 0 и

и т. д.

Пример:

+0.100 = [|X|]дк

1.010 = [-|Y|]дк

0.110 = [|Y|]дк

1.010 = [-|Y|]дк

0.110 = [|Y|]дк

Ответ: [Z]пк = 1.101

Деление в прямом коде со сдвигом делителя

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

  • Если , то z0 = 1.

Если , то z0 = 0.

 

Разрядная сетка (n + d) разрядов, где d = log2n

Пример:

1) [X]пк = 1.1001

2) [Y]пк = 1.1011

n = 4, d = 2

 

Ответ: [Z]пк = 0.1100

Пример:

 

Ответ: [Z]пк = 1.101

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

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

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

 

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

Пример:

[X]дк = 1.0111

[Y]дк = 1.0011

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

+1.0111 | 1.0011

0.1101 = -[Y]дк

______

1.0011 = [Y]дк

______

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

______

1.0011 = [Y]дк

______

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

______

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

Это справедливо при 0 < = [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. Мантисса находится по правилам умножения чисел с фиксированной запятой.

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

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

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

С этой целью нужно сдвинуть мантиссу влево на один разряд. Это соответствует умножению числа на 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. Цифры частного находятся так:

вначале находится целая часть мантиссы, то есть

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

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

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

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

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

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

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

  1. Находится разность порядков:
  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]мок

– то есть это число 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

_______

10.100 =

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

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

[my]ок = 0.110 [My]ок = 1.11111111


Поделиться:



Последнее изменение этой страницы: 2017-03-15; Просмотров: 668; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.041 с.)
Главная | Случайная страница | Обратная связь