Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Вопросы на экзамен - Ответы на экзамен - .doc + .pdf / 15. Методика выполнения операций сложения, вычитания, умножения, деления чисел с п.з. Нормализация результата, блокировки

..doc
Скачиваний:
58
Добавлен:
10.05.2014
Размер:
22.53 Кб
Скачать
  1. Методика выполнения операций сложения, вычитания, умножения, деления чисел с п.з. Нормализация результата, блокировки.

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

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

Умножение:

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

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

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

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

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

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

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

  • Мантисса произведения – ненормализованное число, так как ½ ≤ |Mx| < 1, ½ ≤ |My| < 1, то ¼ ≤ |Mx*My| < 1, при ¼ ≤ |Mx*My| < ½ имеем ненормализованное число. Поэтому необходима нормализация влево максимум только на один разряд. С этой целью нужно сдвинуть мантиссу влево на один разряд. Это соответствует умножению числа на 21. Для того чтобы число не увеличилось в два раза, нужно из порядка вычесть единицу.

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

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

Деление

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

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

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

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

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

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

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

  • Цифры частного находятся так: вначале находится целая часть мантиссы, то есть |Mx| - |My| = α0 Если α0 ≥ 0, то Z0 = 1, если α0 < 0, то Z0 = 0.

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

½ ≤ |Mx| < 1,

½ ≤ |My| < 1,

2-1 < |Mx / My| < 2

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

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

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

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

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

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

Z = X ± Y = 2max(mx,my) *Z.z1z2...zn

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

  1. Находится разность порядков: mx – my = Δ

  2. Производится выравнивание порядков, при этом если разность порядков положительна, то в качестве порядка результата берётся mx, а мантисса My сдвигается вправо на |mx– my| разрядов; еcли разрядность порядков отрицательна, то денормализуется мантисса Mx.

  3. Производится алгебраическое суммирование мантисс слагаемых.

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

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

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

Пример:

[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). Операция блокируется, а результатом будет число: [my]ок = 0.110 [My]ок = 1.11111111

Соседние файлы в папке Вопросы на экзамен - Ответы на экзамен - .doc + .pdf