
Вопросы на экзамен - Ответы на экзамен - .doc + .pdf / 16. Методика выполнения операций вычитания
..doc-
Методика выполнения операций вычитания
Сложение и вычитание
Обе операции выполняются по сходным алгоритмам.
X = 2mx * sign X.x1x2...xn
Y = 2my * sign Y.y1y2...yn
Z = X ± Y = 2max(mx,my).sign Z.z1z2...zn
Операция выполняется следующим образом:
-
Находится разность порядков: mx – my = Δ
-
Производится выравнивание порядков, при этом если разность порядков положительна, то в качестве порядка результата берётся 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 = [Δ]мок - разность порядков
Так как 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).
Операция блокируется, а результатом будет число:
[my]ок = 0.110 [My]ок = 1.11111111
Еще пример
-
Сложение и вычитание
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример для десятичных чисел в экспоненциальной нормализированной форме:
Отсюда:
По шагам:
e=5; m=1.234567 (123456.7)
+ e=2; m=1.017654 (101.7654)
e=5; m=1.234567
+ e=5; m=0.001017654 (Мантисса второго числа после сдвига)
--------------------
e=5; m=1.235584654
Это настоящий результат. Его придется округлить до семи знаков после запятой и нормализировать, если понадобится.
e=5; m=1.235585 (Это наш результат)
В этом примере видно, что последние три цифры результата были утеряны после округления. Это называется ошибкой округления, и в предельном случае она может вызвать ситуацию, когда сумма двух конечных ненулевых чисел равна одному из них:
e=5; m=1.234567
+ e=−3; m=9.876543
e=5; m=1.234567
+ e=5; m=0.00000009876543 (после сдвига)
----------------------
e=5; m=1.23456709876543 (настоящая сумма)
e=5; m=1.234567 (после округления и нормализации - равна первому числу)
С ФИКСИРОВАННОЙ ЗАПЯТОЙ
При представлении чисел с фиксированной запятой считают, что запятая всегда находится перед старшим разрядом, а все числа, которые участвуют в вычислениях, считаются по абсолютной величине меньше единицы:
|X| < 1
Операция алгебраического вычитания
Z=X-Y=X+(-Y)
Может быть сведена к изменению знака вычитаемого Y и операции алгебраического сложения. Изменению знака соответствует следующая процедура: принятый в Pr1 код числа знака передается инверсно в PrА и при сложении осуществляется подсуммирование 1 в младший разряд сумматора.
Пример:
-
3-2
00011(ПК) + 10010(ПК) = 00011(ОК) + 11101(ОК) = 00000 + 00001 = 00001 = 1 Пр 10 -> 1 > 0
-
–3 + 2
00010 + 11000 (ОК) = 11110 + 00001 = 10001 (ПК) = -1
Пр = 01 -> -1 < 0
(Пр-признак переполнения; 1-знак числа; ПК- прямой код; ОК обратный код)