
Вопросы на экзамен - Ответы на экзамен - .doc + .pdf / 16. Методика выполнения операций вычитания
..pdf17.Методика выполнения операций вычитания
Сложение и вычитание
Обе операции выполняются по сходным алгоритмам.
X= 2mx * sign X.x1x2...xn
Y= 2my * sign Y.y1y2...yn
Z= X ± Y = 2max(mx,my).sign Z.z1z2...zn
Операция выполняется следующим образом:
1.Находится разность порядков: mx – my =
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]мок
[Δ]мок = 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 в младший разряд сумматора.
Пример:
1) 3-2
00011(ПК) + 10010(ПК) = 00011(ОК) + 11101(ОК) = 00000 + 00001 = 00001 = 1 Пр 10 -> 1 > 0 2) –3 + 2 00010 + 11000 (ОК) = 11110 + 00001 = 10001 (ПК) = -1
Пр = 01 -> -1 < 0
(Пр-признак переполнения; 1-знак числа; ПКпрямой код; ОК обратный код)