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

Вопросы на экзамен - Ответы на экзамен - .doc + .pdf / 16. Методика выполнения операций вычитания

..doc
Скачиваний:
54
Добавлен:
10.05.2014
Размер:
28.16 Кб
Скачать
  1. Методика выполнения операций вычитания

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

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

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

Еще пример

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

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

Отсюда:

По шагам:

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

  1. –3 + 2

00010 + 11000 (ОК) = 11110 + 00001 = 10001 (ПК) = -1

Пр = 01 -> -1 < 0

(Пр-признак переполнения; 1-знак числа; ПК- прямой код; ОК обратный код)

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