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

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

..pdf
Скачиваний:
57
Добавлен:
10.05.2014
Размер:
151.58 Кб
Скачать

15.Методика выполнения операций сложения, вычитания, умножения, деления чисел с п.з. Нормализация результата, блокировки.

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

Умножение:

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