Выполнение арифметических операций с числами с фиксированной и плавающей запятой



 

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

Напомним, что числа, представленные в естественной форме, в памяти ЭВМ записываются в дополнительном коде, числа в нормальной форме хранятся в прямом коде. Действия в ЭВМ выполняются в прямом и дополнительном коде, обратный код используется для получения дополнительного кода.

 

Действия над числами, представленными в естественной форме (с фиксированной запятой)

При сложении кодов чисел в естественной форме следует учитывать следующие положения:

1) числа хранятся в памяти в дополнительном коде;

2) в сумматоре числа складываются вместе со знаками, при этом образуется знак результата;

3) при сложении чисел с разными знаками единица переноса из знакового разряда стирается, то есть компенсируется одна константа образования дополнительного кода;

4) при сложении чисел с одинаковыми знаками возможно переполнение разрядной сетки, его признаками являются:

а) знак суммы не соответствует знакам слагаемых;

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

Очевидно, что если переносы согласуются, т. е. оба отсутствуют или оба присутствуют, то переполнение разрядной сетки не происходит.

Пример 3.19. Дано А = 254, В = 175. Найти сумму чисел при разных знаках слагаемых в 16-ти разрядном формате (обычной точности).

Решение.

а) представим исходные числа в двоичной системе счисления

A = 25410 = FE16 = 111111102                       В = 17510 = AF16 = 101011112.

б) составим машинные коды этих чисел с разными знаками

[А]пр = 0.000000011111110;              [В ]пр = 0.000000010101111.

[-A]доп= 1.111111100000010;             [-B]доп= 1.111111101010001.

в) выполнение действий:

С1 = А + В                                   С2 = А - В

[А]пр = 0.000000011111110                [А]пр = 0.000000011111110

[В]пр = 0.000000010101111                 [-B]доп= 1.111111101010001

[C1]пр = 0.000000110101101 > 0         [C2Jпр =10.000000001001111>0

Сз = В - А                                    С4 = -А-В

[В ]пр =  0.000000010101111         [-A]доп =  1.111111100000010

[-A]доп = 1.111111100000010         [-B]доп =  1.111111101010001

[-С3]доп =1.111111110110001<0    [-С4]доп =11.111111001010011<0

Из примера следует:

1) При получении сумм слагаемых с одинаковыми знаками (C1 и С4) переполнение разрядной сетки не произошло, т. к. знак суммы соответствует знакам слагаемых и переносы в знаковый и из знакового согласуются.

2) При получении сумм С2 и С4 образовался перенос из знакового разряда, который следует исключить.

3) Суммы C1 и С2 — положительные, СЗ и С4 — отрицательные, т. е. знаки результатов получены автоматически при сложении чисел со знаками.

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

Проверка. Для этого следует перевести полученные суммы любым способом в десятичную систему и сравнить с заданием. С1 = 110101101 = 1 × 28+ 1 ×27 + 1 × 25+ 1 × 23+ 1 × 22+ 1 × 2° = 256 + 128 + 32 + 8 + 4 + 1= 429; (С =254+ 175 = 429).

С2= 1001111 =4F = 4 × 16+15 = 79; (С = 254 - 175 = 79).

С3 = -1001111 =-[(((((1 × 2 + 0)2 + 0)2 + 1)2 + 1)2 + 1)2 + 1] = -79.

С4 = -110101101 =-1AD = -[(1 × 16 +10) 16 +13] = -429.

Пример 3.20. Дано А = 25756, В = 7125. Найти суммы положительных и отрицательных значений в 16-ти разрядном формате.

Решение. А = 2575610 = 649C16 = 1100100100111002; В = 712510 = 1BD516 = 11011110101012.

С1=А+В                                       С2 =-А - В

[А]пр = 0.110010010011100                  [-A]доп = 1.001101101100100

[В]пр = 0.001101111010101                   [-B]доп =1.110010000101011

[C1]пр =1.000000001110001<О              [C2Jпр =10.111111101001111>0

Полученные суммы не соответствуют ожидаемым результатам, т. к. произошло переполнение разрядной сетки за допустимые значения (32767). Переполнение разрядной сетки легко определить либо по первому признаку — знаки сумм C1 и С2 не соответствуют знакам слагаемых, либо по второму — переносы в знаковый и из знакового разряда в суммах C1 и С2 не согласуются. В этих случаях в больших ЭВМ вырабатывается запрос на прерывание программы, в некоторых типах малых ЭВМ производится автоматический переход к нормальной форме представления данных а в персональных обычно производится автоматическое ограничение числа.

Замечание. Операции умножения и деления производятся над абсолютными значениями чисел — в прямом коде, знак произведения определяется сложением по модулю 2 знаков сомножителей (0 + 0 = 0, 1+0 = 1, 1 + 1 = 0), знак частного — сложением по модулю 2 знаков делимого и делителя, а знаку остатка присваивается знак делимого.

 

 

Действия над числами, представленными в нормальной форме (c плавающей запятой)

При алгебраическом сложении чисел, представленных в нормальной форме, необходимо учитывать:

1. Числа в нормальной форме хранятся в памяти в прямом коде с нормализованными мантиссами и смещенными порядками.

2. Сложение кодов чисел производится путем сложения мантисс только при одинаковых порядках (характеристиках) слагаемых. За общий выбирается наибольший порядок. Выравнивание порядков слагаемых осуществляется изменением мантиссы меньшего числа, путем сдвига вправо.

Пусть ,  и РА > РB, тогда разность порядков ΔР= РА - РB и РB = РА - ΔР

где  – мантисса, приведенная к большему порядку путем ее сдвига вправо на ΔР разрядов основания m.

3. При сложении мантисс с одинаковыми знаками возможно переполнение разрядной сетки, что является признаком нарушения нормализации.

4. Результаты в прямом коде нормализуются.

5. Действия в сумматоре выполняются только над кодами мантисс, которые поступают из регистров в младшие 24 (0-23) разряда сумматора (для ЕС и СМ ЭВМ), знаки мантисс и значения порядков заносятся в специальные схемы, которые обеспечивают выравнивание порядков, нормализацию мантиссы результата, формирование знака и порядка суммы. В старшие 8 разрядов (31—24) сумматора записываются нули.

6. Алгоритмы операции алгебраического сложения после выравнивания порядков зависят от знаков слагаемых:

а) Если знаки слагаемых одинаковы (положительные или отрицательные), то модули мантисс (прямые коды) суммируются. Переполнение определяется наличием переноса 1 из старшего разряда мантиссы в поле характеристики (в 25-ый разряд сумматора для СМ ЭВМ), что вызывает нарушение нормализации мантиссы влево. Нормализация результата производится сдвигом мантиссы на один бит вправо, при этом порядок результата увеличивается на 1. После этого в регистре результата сумматора формируется результат операции: из схем анализа знаков и порядков заносятся в 31-ый разряд знак одного из слагаемых, в 30-23 разряды — порядок, а в 22—0 разрядах сохраняется мантисса суммы в прямом коде с учетом скрытой единицы.

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

Нормализация мантиссы суммы производится сдвигом ее влево на один биту и уменьшением порядка на единицу. После этого в регистре сумматора формируется результат: в 31-ый разряд заносится знак большего по модулю слагаемого, в 30—23 разряды — порядок и в 22—0 разряды мантисса результата в прямом коде с учетом скрытой единицы.

Реализацию этих положений рассмотрим на примерах.

Замечание. При действиях над кодами мантисс знаки не указываются, перед старшим разрядом мантиссы через запятую сверху записывается два шестнадцатеричных нуля вместо характеристики и знака мантиссы.

Пример 3.21. Дано: .  Найти С1 = А + В, С2 = -А - В.

Решение. А = F,Е16; В = 0,516 = 0,01012. Рассмотрим решение применительно к формату обычной точности СМ ЭВМ.

а) Нормализация мантисс (с учетом скрытых единиц) и определение смещенных порядков (характеристик): MA = 0,FD; PхA = 80 + 4 = 84; MB = 0,4; РхB = 80 -1 = 7F.

б) Выравнивание характеристик ΔP = 84-7F=5;

.

в) Выполнение действий (при этом учитывается скрытая единица)

1) C1=A + B

[MA]пр=  00’FE0000; РхA = 84

[M*B]пр=  00’050000;   РxB = 84

[MC1]пр= 01’030000; РхC1 = 84

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

Нормализация мантиссы

[MC1]пр = 00’818000; РC1= 84 + 1 = 85

Проверка. =10000,00112

В разрядной сетке регистра сумматора формируется результат действия: заносятся знак результата (+), характеристика (85) и сохраняется мантисса в прямом коде c учетом скрытой единицы.

Ответ. C1 → 0 10000101 00000011000000000000000

             Зн PxC1              MC1

или С1 → 42818000

2) С2 = -А - В

Так как числа А и В и результат С2 хранятся в прямом коде, то нет необходимости выполнять двойное преобразование: данных в дополнительный, а результата в прямой коды. Поэтому действие выполняется С2 = -(А + В), т. е. производится сложение прямых кодов мантисс, а результату приписывается знак одного из чисел (минус), то есть С2 = - С1.

Ответ. C2 → 1 10000101 00000011000000000000000

             Зн PxC2              MC2

или С2 → C2818000

Пример 3.22. Дано: . Найти С3 = А - В, С4 = -B - A.

Решение. А = F,Е16; В = 0,516= 0,01012. Опять рассмотрим решение применительно к формату обычной точности СМ ЭВМ.

а) Нормализация мантисс и определение характеристик:

MA = 0,FD; PхA = 80 + 4 = 84;

MB =0,416;  РхB = 80 -1 = 7F.

б) Выравнивание характеристик ΔP = 84-7F=5;

.

в) Выполнение действий

1) C3=A - B

[MA]пр= 00’FE0000; РхA = 84

[-M*B]доп= 1,00 - 0,05=0,FB = 00’FB0000; РxB = 84

[MC3]пр= 00’F90000; РхC1 = 84

Так как слагаемые с разными знаками, то 1 переноса из старшего разряда мантиссы является признаком положительного результата и стирается, компенсируя константу дополнительного кода.

Проверка. =1111,10012

В разрядной сетке регистра сумматора формируется результат действия: заносятся знак результата (+), характеристика (84) и сохраняется мантисса в прямом коде c учетом скрытой единицы.

Ответ. C3 → 0 10000100 11110010000000000000000

             Зн PxC3              MC3

или С3→ 42790000

2) С4= В - A

[M*B]пр= 00’050000; РxB = 84

[-MA]доп= 1,00 - 0,FE=0,02 = 00’020000; РxA= 84

[MC4]доп = 00’070000<0; РхC4 = 84

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

[MC4]пр = 1,00 – 0,07= 0,F9=00’F90000; РхC4 = 84.

Проверка. С4 = -F,9 = - .

Ответ (c учетом скрытой единицы): С4 → 1 10000100 11110010000000000000000

или С4 → С2790000.

Пример 3.23. Дано А = 129, В = . Найти C1 = A – B, C2 = B - A.

Решение. А = 8116, В = 73,С16

Будем выполнять действия применительно к IBM PC.

а) Нормализация мантисс и определение характеристик

MA = 1,02; PхA = 7F + 7 = 86; c учетом скрытой единицы MA = 0,02

MB = 1,CF;  РхB = 7F + 6 = 85, c учетом скрытой единицы MB = 0,CF

б) Выравнивание характеристик ΔP = 86-85=1;

.

в) Выполнение действий

1) С1 = А - В

 [MA]пр= 01’020000; РхA = 86

[-MB]доп= 2,000 - 0,E78=1,188 = 01’188000; РxB = 86

[MC1]доп= 02’1A8000 > 0 РхC1 = 86

Единица переноса стирается, результат положительный, но произошло нарушение нормализации вправо.

Нормализация мантиссы

[MC1]доп= 01’A80000 РхC1 = 86 - 4 = 82

Проверка. C1= D,4 = =1101,012

Ответ (c учетом скрытой единицы): C1 → 0 10000010 10101000000000000000000 или C1 = 41540000.

2) С2 = В - А

[M*B]пр= 00’E78000; РxB = 86

[-MA]доп= 2,00 - 1,02 = 00’FE0000; РxA= 86

[MC2]доп = 01’E58000 <0; РхC2 = 86

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

[MC2]пр = 2,000 – 1,E58= 0,1A8 = 00’1A8000; РхC2= 86.

Старший бит мантиссы равно нулю — нарушение нормализации вправо.

Нормализация мантиссы [MC2]пр = 01’А80000; РхC2= 86-4 = 82.

Ответ. С2 → 1 10000010 10101000000000000000000 или С2 = C1540000.

Замечание. При выполнении операций умножения и деления порядки не выравниваются, нормализованные мантиссы чисел умножаются или делятся, порядки соответственно складываются или вычитаются, а знаки произведения и частного определяются, как и в естественной форме, сложением по модулю 2 знаков сомножителей или делимого и делителя.


Дата добавления: 2019-11-25; просмотров: 1670; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!