Логические и арифметические основы и принципы работы ЭВМ

Деление

Разбить на страницы
Показывать лекцию целиком

Реализация операции деления в ЭВМ в двоичной системе счисления выполняется проще, чем в десятичной. Это объясняется тем, что при определении каждой цифры частного нужно сделать только одну пробу.

Если числа X и Y заданы в прямом коде, и они представлены с фиксированной запятой, то для выполнения деления используются два основных алгоритма:

  • со сдвигом и автоматическим восстановлением остатка ;
  • со сдвигом делителя и автоматическим восстановлением остатка.
  • Пусть: [X]пк = sign X. x1x2..xn

    [Y]пк = sign Y. y1y2..yn

    [Z]пк = [X]пк/[Y]пк = sign Z. z1z2..zn

    X и Y должны быть такими, чтобы:

    |Z| < 1 (то есть фиксированная запятая )

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

  • $$sign\ Z = sign\ X \oplus sign\ Y$$
  • $$|X| - |Y| = \alpha _{0}$$
  • Если $$\alpha _{0} \ge 0$$, то z0 = 1 и $$2\alpha _{0} - |Y| = \alpha _{1}$$ ( z0 – целая часть результата).

    Если $$\alpha _{0} < 0$$, то z0 = 0 и $$2\alpha _{0} + |Y| = \alpha _{1}$$

  • и т. д.

    Пример:

    $$\lbrack X \rbrack_{пк} = 0.100\\ \lbrack Y \rbrack_{пк} = 1.110\\ sign\ Z = 1 \oplus 0 = 1\\ \lbrack-|Y| \rbrack_{дк} = 1.010$$

    +0.100 = [|X|]дк

    1.010 = [-|Y|]дк

    $$1.110 = \alpha _{0} = [|X|]_{дк} + [-|Y|]_{дк} < 0, z_{0} = 0$$

    $$_{+}1.100 = 2\alpha _{0} (сдвиг\ в\ ДК\ отрицательного\ числа)$$

    0.110 = [|Y|]дк

    $$0.010 = \alpha _{1} = 2\alpha _{0} + [|Y|]_{дк} > 0,\ z_{1} = 1$$

    $$_{+}0.100 = 2\alpha _{1}$$

    1.010 = [-|Y|]дк

    $$1.110 = \alpha _{2} = 2\alpha _{1} + [-|Y|]_{дк} < 0, z_{2} = 0$$

    $$_{+}1.100 = 2\alpha _{2} (сдвиг\ в\ ДК\ отрицательного\ числа)$$

    0.110 = [|Y|]дк

    $$0.010 = \alpha _{3} = 2\alpha _{2} + [|Y|]_{дк} > 0, z_{3} = 1$$

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

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

  • $$sign\ Z = sign\ X \oplus sign\ Y$$
  • $$|X| - |Y| = \alpha _{0}$$
  • Если $$\alpha _{0} \ge 0$$, то z0 = 1.

    Если $$\alpha _{0} < 0$$, то z0 = 0.

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

    Пример:

    1) [X]пк = 1.1001
    2) [Y]пк = 1.1011
    n = 4, d = 2

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

    Пример:

    $$\lbrack X \rbrack_{пк} = 0.100\\ \lbrack Y\rbrack_{пк} = 1.110\\ sign\ Z = 0 \oplus 1 = 1\\ \lbrack -|Y|\rbrack_{мдк}= 11.010\\ |Y| = 00.110$$

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

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

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

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

    Пример:

    [X]дк = 1.0111 
    [Y]дк = 1.0011 
    Т.к. sign X = sign Y,то

    +1.0111 | 1.0011

    0.1101 = -[Y]дк

    ______

    $$0.0100 = \alpha _{0} = [X]_{дк} + [-[Y]_{дк} ]_{дк} , \ sign \alpha _{0} \ne sign Y, то z_{0} = 0$$

    $$2\alpha _{0} = _{+}0.1000$$

    $$Т.к.\ sign \alpha _{0} \ne sign\ Y,\ то$$

    1.0011 = [Y]дк

    ______

    $$1.1011 = \alpha _{1} = 2\alpha _{0} + [Y]_{дк} , \ т.к.\ sign \alpha _{1} = sign\ Y,\ то\ z_{1} = 1$$

    $$2\alpha _{1} = _{+}1.0110$$

    $$Т.к.\ sign \alpha _{1} = sign\ Y,\ то$$

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

    ______

    $$0.0011 = \alpha _{2} = 2 \alpha _{1} + [-[Y]_{дк} ]_{дк} , \ т.к.\ sign \alpha _{2} \ne sign\ Y,\ то z_{2} =0$$

    $$2\alpha _{2} = _{+}0.0110$$

    $$Т.к.\ sign\ \alpha _{2} \ne sign\ Y,\ то$$

    1.0011 = [Y]дк

    ______

    $$1.1001 = \alpha _{3} = 2 \alpha _{3} + [Y]_{дк} ,\ т.к.\ sign \alpha _{3} = sign\ y,\ то\ z_{3} = 1$$

    $$2\alpha _{3} = _{+}1.0010$$

    $$Т.к.\ sign\ \alpha _{3} = sign\Y,\ то$$

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

    ______

    $$1.1111 = \alpha _{4} = 2 \alpha _{3} + [-[Y]_{дк} ]_{дк} , \ т.к.\ sign\ \alpha _{4} = sign\ Y,\ то\ z_{4} =1$$

    Ответ: [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

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

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

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

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

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

    $$\frac12 \le |M_{x}| < 1,\\ \frac12 \le |M_{y}| < 1,\ то \\ \frac14 \le |M_{x}*M_{y}| < 1,\ при\ \frac14 \le |M_{x}*M_{y}| < \frac12 \\ имеем\ ненормализованное\ число.$$

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

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

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

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

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

  • Деление

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

    X = 2mx * sign X.x1x2...xn
    Y = 2my * sign Y.y1y2...yn
    Z = X/Y = 2mx–my * sign Z.z1z2...zn

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

  • Находится по известным правилам знак частного.
  • Порядок частного находится как разность порядков делимого и делителя.
  • Цифры частного находятся так:

    вначале находится целая часть мантиссы, то есть $$|M_{x}| - |M_{y}| = \alpha _{0}$$

    Если $$\alpha _{0} \ge 0,\ то\ z_{0} = 1$$, если $$\alpha _{0} < 0$$, то z0 = 0.

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

    $$\frac12 \le |M_{x}| < 1,\\ \frac12 \le |M_{y}| < 1,\\ 2^{-1} < |M_{x} / M_{y}| < 2$$

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

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

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

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

    $$X = 2^{mx} * sign\ X.x_{1}x_{2}\dots x_{n}\\ Y = 2^{my} * sign\ Y.y_{1}y_{2}\dots y_{n}\\ Z = X \pm Y = 2^{max(mx,my)}.sign\ Z.z_{1}z_{2}\dots z_{n}$$

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

  • Находится разность порядков: $$m_{x} – m_{y} = \Delta$$
  • Производится выравнивание порядков, при этом если разность порядков положительна, то в качестве порядка результата берётся mx, а мантисса My сдвигается вправо на |mx– my| разрядов; еcли разрядность порядков отрицательна, то денормализуется мантисса Mx.
  • Производится алгебраическое суммирование мантисс слагаемых.
  • Выполняется нормализация влево или вправо на соответствующее число разрядов с необходимым исправлением порядка.
  • Пример:

    порядок       мантисса
    [mx]пк = 0.11 [Mx]пк = 0.1010
    [my]пк = 0.10 [My]пк = 0.1110
    Находим разность порядков:
        +00.11 = [mx]мок
         11.01 = [-my]мок
      1| 00.00
       |_ _->1
    

    00.01 = $$[\Delta]_{мок}$$ - разность порядков.

    Так как 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 = $$\infty$$.

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

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

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

    Пример:

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

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

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

    $$[\Delta ]_{мок} = 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 = $$[\Delta]_{мок}$$

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

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

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

    Десятичные двоично-кодированные системы.

    Иногда в ЭВМ используются десятичные системы счисления. Их выгодно использовать тогда, когда объем исходных данных для обработки на ЭВМ – велик, сама обработка производится по относительно несложным программам. На этом происходит значительная экономия времени, которая вытекает из того, что не нужно делать перевод из десятичной в двоичную систему и обратно.

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

    Перевод чисел из десятичной системы в десятичную двоично-кодированную выполняется исключительно просто, поразрядно и одновременно по всей сетке:

    879,65_10 -> 1000 0111 1001, 0110 010110^-2

    Аналогично, выполняется и обратный перевод:

    0110 1001, 0101 001110^-2 -> 69, 5310

    Существует большое разнообразие десятичных двоично-кодированных систем. Это многообразие вытекает из избыточности двоичного кода, при котором из 16 возможных комбинаций в каждом разряде используется по прямому информационному назначению лишь 10.

    Наиболее широкое применение находят системы кодирования 8421 и 8421+3 (код Штибитца).

    Система 8421 – неудобна тем, что при выполнении операции вычитания нет прямого перехода от цифры каждого разряда к дополнительному коду.

    0000 - 0

    0001 - 1

    0010 - 2

    0011 - 3

    0100 - 4

    0101 - 5

    0110 - 6

    0111 - 7

    1000 - 8

    1001 - 9

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

    Система 8421+3 - более интересна, т.к. она обладает свойством самодополнения. Видно, что дополнение до 9 можно получить, применяя операцию поразрядного инвертирования кода.

    0011 – 0

    0100 – 1

    0101 – 2

    0110 – 3

    0111 – 4

    1000 – 5

    1001 – 6

    1010 – 7

    1011 – 8

    1100 – 9

    Всего существует А1610 = 2,9•1010 вариантов 10-ых двоично-кодированных систем.

    Страницы:

    Реализация операции деления в ЭВМ в двоичной системе счисления выполняется проще, чем в десятичной. Это объясняется тем, что при определении каждой цифры частного нужно сделать только одну пробу.

    Если числа X и Y заданы в прямом коде, и они представлены с фиксированной запятой, то для выполнения деления используются два основных алгоритма:

  • со сдвигом и автоматическим восстановлением остатка ;
  • со сдвигом делителя и автоматическим восстановлением остатка.
  • Пусть: [X]пк = sign X. x1x2..xn

    [Y]пк = sign Y. y1y2..yn

    [Z]пк = [X]пк/[Y]пк = sign Z. z1z2..zn

    X и Y должны быть такими, чтобы:

    |Z| < 1 (то есть фиксированная запятая )

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

  • $$sign\ Z = sign\ X \oplus sign\ Y$$
  • $$|X| - |Y| = \alpha _{0}$$
  • Если $$\alpha _{0} \ge 0$$, то z0 = 1 и $$2\alpha _{0} - |Y| = \alpha _{1}$$ ( z0 – целая часть результата).

    Если $$\alpha _{0} < 0$$, то z0 = 0 и $$2\alpha _{0} + |Y| = \alpha _{1}$$

  • и т. д.

    Пример:

    $$\lbrack X \rbrack_{пк} = 0.100\\ \lbrack Y \rbrack_{пк} = 1.110\\ sign\ Z = 1 \oplus 0 = 1\\ \lbrack-|Y| \rbrack_{дк} = 1.010$$

    +0.100 = [|X|]дк

    1.010 = [-|Y|]дк

    $$1.110 = \alpha _{0} = [|X|]_{дк} + [-|Y|]_{дк} < 0, z_{0} = 0$$

    $$_{+}1.100 = 2\alpha _{0} (сдвиг\ в\ ДК\ отрицательного\ числа)$$

    0.110 = [|Y|]дк

    $$0.010 = \alpha _{1} = 2\alpha _{0} + [|Y|]_{дк} > 0,\ z_{1} = 1$$

    $$_{+}0.100 = 2\alpha _{1}$$

    1.010 = [-|Y|]дк

    $$1.110 = \alpha _{2} = 2\alpha _{1} + [-|Y|]_{дк} < 0, z_{2} = 0$$

    $$_{+}1.100 = 2\alpha _{2} (сдвиг\ в\ ДК\ отрицательного\ числа)$$

    0.110 = [|Y|]дк

    $$0.010 = \alpha _{3} = 2\alpha _{2} + [|Y|]_{дк} > 0, z_{3} = 1$$

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

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

  • $$sign\ Z = sign\ X \oplus sign\ Y$$
  • $$|X| - |Y| = \alpha _{0}$$
  • Если $$\alpha _{0} \ge 0$$, то z0 = 1.

    Если $$\alpha _{0} < 0$$, то z0 = 0.

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

    Пример:

    1) [X]пк = 1.1001
    2) [Y]пк = 1.1011
    n = 4, d = 2

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

    Пример:

    $$\lbrack X \rbrack_{пк} = 0.100\\ \lbrack Y\rbrack_{пк} = 1.110\\ sign\ Z = 0 \oplus 1 = 1\\ \lbrack -|Y|\rbrack_{мдк}= 11.010\\ |Y| = 00.110$$

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

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

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

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

    Пример:

    [X]дк = 1.0111 
    [Y]дк = 1.0011 
    Т.к. sign X = sign Y,то

    +1.0111 | 1.0011

    0.1101 = -[Y]дк

    ______

    $$0.0100 = \alpha _{0} = [X]_{дк} + [-[Y]_{дк} ]_{дк} , \ sign \alpha _{0} \ne sign Y, то z_{0} = 0$$

    $$2\alpha _{0} = _{+}0.1000$$

    $$Т.к.\ sign \alpha _{0} \ne sign\ Y,\ то$$

    1.0011 = [Y]дк

    ______

    $$1.1011 = \alpha _{1} = 2\alpha _{0} + [Y]_{дк} , \ т.к.\ sign \alpha _{1} = sign\ Y,\ то\ z_{1} = 1$$

    $$2\alpha _{1} = _{+}1.0110$$

    $$Т.к.\ sign \alpha _{1} = sign\ Y,\ то$$

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

    ______

    $$0.0011 = \alpha _{2} = 2 \alpha _{1} + [-[Y]_{дк} ]_{дк} , \ т.к.\ sign \alpha _{2} \ne sign\ Y,\ то z_{2} =0$$

    $$2\alpha _{2} = _{+}0.0110$$

    $$Т.к.\ sign\ \alpha _{2} \ne sign\ Y,\ то$$

    1.0011 = [Y]дк

    ______

    $$1.1001 = \alpha _{3} = 2 \alpha _{3} + [Y]_{дк} ,\ т.к.\ sign \alpha _{3} = sign\ y,\ то\ z_{3} = 1$$

    $$2\alpha _{3} = _{+}1.0010$$

    $$Т.к.\ sign\ \alpha _{3} = sign\Y,\ то$$

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

    ______

    $$1.1111 = \alpha _{4} = 2 \alpha _{3} + [-[Y]_{дк} ]_{дк} , \ т.к.\ sign\ \alpha _{4} = sign\ Y,\ то\ z_{4} =1$$

    Ответ: [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

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

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

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

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

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

    $$\frac12 \le |M_{x}| < 1,\\ \frac12 \le |M_{y}| < 1,\ то \\ \frac14 \le |M_{x}*M_{y}| < 1,\ при\ \frac14 \le |M_{x}*M_{y}| < \frac12 \\ имеем\ ненормализованное\ число.$$

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

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

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

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

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

  • Деление

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

    X = 2mx * sign X.x1x2...xn
    Y = 2my * sign Y.y1y2...yn
    Z = X/Y = 2mx–my * sign Z.z1z2...zn

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

  • Находится по известным правилам знак частного.
  • Порядок частного находится как разность порядков делимого и делителя.
  • Цифры частного находятся так:

    вначале находится целая часть мантиссы, то есть $$|M_{x}| - |M_{y}| = \alpha _{0}$$

    Если $$\alpha _{0} \ge 0,\ то\ z_{0} = 1$$, если $$\alpha _{0} < 0$$, то z0 = 0.

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

    $$\frac12 \le |M_{x}| < 1,\\ \frac12 \le |M_{y}| < 1,\\ 2^{-1} < |M_{x} / M_{y}| < 2$$

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

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

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

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

    $$X = 2^{mx} * sign\ X.x_{1}x_{2}\dots x_{n}\\ Y = 2^{my} * sign\ Y.y_{1}y_{2}\dots y_{n}\\ Z = X \pm Y = 2^{max(mx,my)}.sign\ Z.z_{1}z_{2}\dots z_{n}$$

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

  • Находится разность порядков: $$m_{x} – m_{y} = \Delta$$
  • Производится выравнивание порядков, при этом если разность порядков положительна, то в качестве порядка результата берётся mx, а мантисса My сдвигается вправо на |mx– my| разрядов; еcли разрядность порядков отрицательна, то денормализуется мантисса Mx.
  • Производится алгебраическое суммирование мантисс слагаемых.
  • Выполняется нормализация влево или вправо на соответствующее число разрядов с необходимым исправлением порядка.
  • Пример:

    порядок       мантисса
    [mx]пк = 0.11 [Mx]пк = 0.1010
    [my]пк = 0.10 [My]пк = 0.1110
    Находим разность порядков:
        +00.11 = [mx]мок
         11.01 = [-my]мок
      1| 00.00
       |_ _->1
    

    00.01 = $$[\Delta]_{мок}$$ - разность порядков.

    Так как 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 = $$\infty$$.

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

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

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

    Пример:

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

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

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

    $$[\Delta ]_{мок} = 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 = $$[\Delta]_{мок}$$

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

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

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

    Десятичные двоично-кодированные системы.

    Иногда в ЭВМ используются десятичные системы счисления. Их выгодно использовать тогда, когда объем исходных данных для обработки на ЭВМ – велик, сама обработка производится по относительно несложным программам. На этом происходит значительная экономия времени, которая вытекает из того, что не нужно делать перевод из десятичной в двоичную систему и обратно.

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

    Перевод чисел из десятичной системы в десятичную двоично-кодированную выполняется исключительно просто, поразрядно и одновременно по всей сетке:

    879,65_10 -> 1000 0111 1001, 0110 010110^-2

    Аналогично, выполняется и обратный перевод:

    0110 1001, 0101 001110^-2 -> 69, 5310

    Существует большое разнообразие десятичных двоично-кодированных систем. Это многообразие вытекает из избыточности двоичного кода, при котором из 16 возможных комбинаций в каждом разряде используется по прямому информационному назначению лишь 10.

    Наиболее широкое применение находят системы кодирования 8421 и 8421+3 (код Штибитца).

    Система 8421 – неудобна тем, что при выполнении операции вычитания нет прямого перехода от цифры каждого разряда к дополнительному коду.

    0000 - 0

    0001 - 1

    0010 - 2

    0011 - 3

    0100 - 4

    0101 - 5

    0110 - 6

    0111 - 7

    1000 - 8

    1001 - 9

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

    Система 8421+3 - более интересна, т.к. она обладает свойством самодополнения. Видно, что дополнение до 9 можно получить, применяя операцию поразрядного инвертирования кода.

    0011 – 0

    0100 – 1

    0101 – 2

    0110 – 3

    0111 – 4

    1000 – 5

    1001 – 6

    1010 – 7

    1011 – 8

    1100 – 9

    Всего существует А1610 = 2,9•1010 вариантов 10-ых двоично-кодированных систем.

    Вернуться к учебному плану