книги из ГПНТБ / Архаров В.И. Арифметические и логические основы цифровых вычислительных машин учеб. пособие
.pdfПоскольку при арифметических действиях над двумя нормали зованными числами мантисса результата удовлетворяет условию
1 < |Л М < 2 ,
то признаком нарушения нормализации влево для положительных чисел является сочетание 01, для отрицательных чисел — сочета ние 10 в двух знаковых разрядах. Нормализация может быть вос становлена путем модифицированного сдвига мантиссы вместе со знаковым разрядом на один разряд вправо с одновременным при бавлением к порядку единицы.
Невыполнение условия
называется нарушением нормализации вправо, признаком кото рого является для положительных чисел сочетание 00,0; для от рицательных чисел, представленных в модифицированном прямом коде, сочетание П-,0; для отрицательных чисел, представленных в модифицированном обратном или дополнительном кодах—сочета ние 11,1 в двух знаковых разрядах числа и старшем цифровом раз ряде мантиссы.
Восстановление нормализации осуществляется путем повторе ния цикла сдвига мантиссы влево с одновременным вычитанием единицы из порядка до тех пор, пока в знаковых разрядах и стар шем цифровом разряде мантиссы не появятся для положительных и отрицательных чисел, представленных в модифицированном пря мом коде, соответственно сочетания 00,1 и 11,1; для отрицательных чисел, представленных в модифициоованном дополнительном или обратном кодах, сочетание 11,0.
§6. СЛОЖЕНИЕ И ВЫЧИТАНИЕ ЧИСЕЛ В ЦВМ
СПЛАВАЮЩЕЙ ЗАПЯТОЙ
Сложение и вычитание нормализованных чисел с одинаковыми порядками осуществляется аналогично сложению и вычитанию чисел в ЦВМ с фиксированной запятой. Мантиссы чисел склады ваются в одном из модифицированных кодов и результату приписы вается порядок слагаемых.
При сложении или вычитании чисел с разными порядками, их порядки предварительно выравниваются, при этом нормализация одного из чисел нарушается. При выравнивании порядков число с меньшим порядком приводится к порядку второго числа путем сдвига мантиссы вправо и добавления к порядку первого числа еди ницы при каждом сдвиге.
Выравнивание порядков путем приведения числа с большим порядком к порядку второго числа выполнять нельзя, так как в этом случае необходимо сдвигать мантиссу нормализованного числа влево, что приводит к потере старших цифровых разрядов мантиссы.
60
Алгебраическое суммирование двух чисел в ЦВМ с плавающей запятой выполняется по следующему алгоритму. Из порядка пер вого числа вычитается порядок второго числа. Знак разности по рядков указывает, какая из мантисс сдвигается вправо при вырав нивании порядков, и порядок какого слагаемого принимается за порядок результата.
Если разность порядков положительна, мантисса второго сла гаемого сдвигается вправо на один разряд с одновременным вычи танием единицы из разности порядков до тех пор, пока разность порядков не будет равна 0. Затем йроизводится суммирование нор мализованной мантиссы первого слагаемого с ненормализованной мантиссой второго слагаемого, результату присваивается порядок первого слагаемого.
Если разность порядков отрицательна, то в каждом цикле вы полняется сдвиг на один разряд вправо мантиссы первого слагае мого, а к разности порядков прибавляется единица до тех пор, пока разность не будет равна нулю. Затем выполняется суммирование мантисс. Результату присваивается порядок второго слагаемого.
Алгебраическое суммирование порядков, так же как и мантисс, происходит в ЦВМ в одном из модифицированных кодов, обратном или дополнительном. Однако для упрощения в приведенных ниже примерах алгебраическое суммирование порядков приведено в пря мом коде.
При алгебраическом суммировании мантисс в одном из модифи
цированных кодов возможны три случая. |
|
|
|
|
||||
1. |
Сложение выполняется без переполнения разрядной сетки и |
|||||||
нарушения нормализации. |
В этом случае результат переводится из |
|||||||
модифицированного обратного или дополнительного кода в прямой. |
||||||||
Порядком результата будет общий порядок обоих слагаемых. |
|
|||||||
Пример 15. |
|
|
|
|
|
|
|
|
|
|
Знак |
Мантисса |
Знак |
Порядок |
|
|
|
|
|
числа |
порядка |
|
|
|||
Первое слагаемое |
00 |
100001100101 |
00 |
110 |
= 33 — |
|||
(I) |
|
|
|
|
|
|
|
64 |
Второе слагаемое |
00 |
101100010000 |
00 |
011 |
= |
5 ” |
||
(II) |
|
|
||||||
|
|
|
|
|
|
|
32 |
|
|
S |
|
|
|
|
|
= 39 — |
|
|
|
|
|
|
|
|
|
64 |
П е р в ы й |
ш а г . |
Вычитание порядков: Ар = ПО—011 = |
011. |
|||||
В т о р о й |
ш а г . |
Выравнивание порядков: |
Л р > 0, |
поэтому |
||||
|
|
|
нормализованная мантисса второго слагае |
|||||
|
|
|
мого сдвигается на три разряда вправо |
|||||
|
|
|
(II) |
00,000101100010. |
|
|
|
61
Т р е т и й ш а г . Перевод обеих мантисс в модифицированный дополнительный код и сложение мантисс:
|
|
(I) |
, 00,100001100101 |
|
|
(II) |
+ 00,000101100010 |
|
|
|
00,100111000111 |
Ч е т в е р т ы й |
ш а г . |
Перевод результата в прямой код и |
|
|
|
|
присвоение результату порядка пер |
|
|
|
вого слагаемого: |
|
|
S == 00.100111000111.00.110. |
|
Проверка |
Z = 0,100111000111-2т1,0 = |
||
|
|
= 100111,000111=39— . |
|
|
|
|
64 |
2. |
Сложение выполняется без переполнения разрядной сетки, |
но результат после перевода в прямой код окажется ненормализо ванным, происходит нарушение нормализации вправо.
Пример 16. |
|
|
|
|
|
|
Первое слагаемое (I) |
00.10000001011.00.100 = |
8 — |
||||
|
|
|
|
|
|
128 |
Второе слагаемое |
(II) |
11.10001111111.00.111=—71 — |
||||
|
|
|
|
|
|
16 |
|
2 |
|
|
|
= —63 — |
|
|
|
|
|
|
|
128 |
П е р в ы й |
ша г . |
Вычитание |
порядков: |
Ар = |
100— 111 = |
|
= — 011. |
|
|
|
|
|
|
В т о р о й |
ш а г . |
Выравнивание |
порядков: |
Д р < 0 , поэтому |
||
|
|
нормализованная мантисса первого слагае |
||||
|
|
мого сдвигается на три разряда |
вправо |
|||
|
(II) |
|
00.00010000001011. |
|
|
Т р е т и й ш а г . Перевод обеих мантисс в модифицирован ный дополнительный код и сложение ман тисс:
(I),00,00010000001011
(II)+ 11,01110000001000 11,10000000010011.
Че т в е р т ы й ш а г . Перевод результата в прямой код
11,01111111101101.
П я т ы й ш а г . Нормализация результата: мантисса резуль тата сдвигается влево на один разряд, одно временно от порядка второго слагаемого вычитается единица
11, 1111111101101.
62
Порядок второго слагаемого становится 111—001 = ПО.
Ш е с т о й ш а г . Результату присваивается порядок второго слагаемого
2 = 11, 1111111101101.00,110.
Проверка: S = —0,1111111101101 ■2+110 =
= —111111,1101101 = —63 — .
128
3. При сложении происходит переполнение разрядной сетки, происходит нарушение нормализации влево.
Пример 17.
Первое слагаемое (I) 11,10101100001.00,110 = — 43 —
|
|
|
|
32 |
Второе слагаемое |
(II) 11,11111110111.00,111= — 127 — |
|||
|
|
|
|
16 |
П е р в ы й |
ш а г . |
Вычитание |
порядков: |
Ар = ПО— 111 = |
= — 001. |
|
|
|
|
В т о р о й |
ш а г . |
Выравнивание |
порядков: |
Д р < 0 , поэтому |
|
|
мантиссу первого слагаемого сдвигаем впра |
||
|
|
во на один разряд |
|
(II)11,010101100001.
Т р е т и й ш а г . Перевод обеих мантисс в модифицирован ный дополнительный код и сложение ман тисс:
(I) , 11,101010011111 (II) + 11,000000010010
10, 101010110001.
Ч е т в е р т ы й ш а г . Исправление |
денормализации |
влево: |
||||
|
|
осуществляется |
модифицированный |
|||
|
|
сдвиг мантиссы результата вправо на |
||||
|
|
один разряд с одновременным увели |
||||
|
|
чением на единицу порядка второго |
||||
|
|
слагаемого: |
|
|
|
|
|
|
11,0101010110001. |
|
|
|
|
Порядок второго |
слагаемого будет |
равен |
|
111 + 001 |
= 1000. |
|
П я т ы й |
ш а г . |
Перевод мантиссы результата в прямой код: |
||||
|
|
11, 1010101001111. |
|
|
|
|
Ш е с т о й |
ш а г . |
Присвоение результату |
порядка |
второго |
||
слагаемого: |
|
|
|
|
|
|
|
2 = |
11, 1010101001111.00, 1000. |
|
|
|
63
Проверка. |
2 = —0,1010101001111.2+1000 = |
|
|
|
= —10101010,01111 = — 170— . |
|
|
32 |
§ 7. |
УМНОЖЕНИЕ ЧИСЕЛ В ЦВМ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ |
|
Умножение чисел в нормальной форме происходит по следую |
||
щему |
алгоритму: |
знака произведения путем сложения знаков |
а) |
определение |
|
сомножителей согласно таблице 3-1; |
||
б) |
определение |
порядка произведения путем алгебраического |
сложения порядков сомножителей в одном из модифицированных кодов;
в) перемножение мантисс сомножителей, дающее мантиссу про изведения так же, как и для чисел с фиксированной запятой.
Произведение мантисс двух нормализованных чисел, каждая
из которых не меньше 00,1 . . . , может оказаться |
меньше 00,1, |
то есть происходит нарушение нормализации вправо, |
но не более, |
чем на один разряд. Для исправления денормализации мантиссу произведения сдвигают влево на один разряд с одновременным уве личением на единицу порядка произведения.
Пример 18. Умножить два числа, пользуясь при умножении ман тисс сомножителей методом просмотра одной цифры множителя, начиная с младшего разряда
Знак |
Мантисса |
Знак |
Порядок |
числа |
|
порядка |
|
Множимое
Множитель
Произведение
П е р в ы й ш а г .
11 |
11011 |
11 0001 = —27-2“ ' |
11 |
11001 |
00 1 1 1 1 ^ —25-2+ |
= + 6 7 5 - 2 '4
Складывая порядки сомножителей с уче том знаков, получим порядок произведе ния:
|
, 11,1111 |
ДК |
порядка множимого |
||
|
"'00,1111 |
ПК |
порядка множителя |
||
|
00,1110 ПК порядка произведения. |
||||
В т о р о й |
ш а г . |
Складывая |
коды знаков сомножителей со |
||
|
|
гласно таблице 3-1, получим код знака про |
|||
|
|
изведения: |
|
||
|
|
|
11 + 11= 00. |
||
Т р е т и й |
ша г . |
Производим |
умножение мантисс: |
||
|
|
00,11011 |
ПК мантиссы множимого |
||
|
|
00,11001 |
Множитель |
64
I такт , 00,00000 |
«1» — цифра множителя |
+00,11011 ПК множимого
00,11011 1 частичное произведение (ЧП)
00,011011 сдвиг 1ЧП на 1 разряд вправо
IIтакт 00,011011 «0»
00,0011011 сдвиг 2ЧП на 1 разряд вправо
III такт |
|
00,0011011 |
«0» |
|
|
00,00011011 |
сдвиг ЗЧП на 1 разряд вправо |
IV такт |
, |
00,00011011 |
«1» |
|
+ |
00,11011000 |
ПК множимого |
|
|
00,11110011 |
4ЧП |
|
|
00,011110011 |
сдвиг 4ЧП на 1 разряд вправо |
V такт |
,00,011110011 |
«1» |
|
|
+00,110110000 |
ПК множимого |
|
|
|
01,010100011 |
5ЧП |
00,1010100011 сдвиг 5ЧП на 1 разряд вправо
Конец циклического |
процесса |
|
00,1010100011 |
мантисса |
произведения. |
Ч е т в е р т ы й ш а г . |
Мантиссе |
произведения приписываем |
|
суммарный порядок сомножителей и |
|
|
знак числа: |
00,1010100011.00.1110.
Проверка. 00.1010100011.00.1110 = 00,1010100011 • 2+1110 =
= 675-2_10.2 +14 = 675-2+4-
Пример 19 (ускоренное умножение). Умножить два числа, поль зуясь при умножении мантисс сомножителей методом просмотра двух очередных цифр множителя, начиная с младших разрядов.
|
Знак |
Мантисса |
|
Порядок |
|
|
|
числа |
|
|
|||
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
Множимое |
00 |
110111011 |
00 |
1000 |
= |
4 2 2 1 2 |
Множитель |
00 |
110110010 |
11 |
0101 |
= |
+ — |
|
|
|
|
|
|
8192 |
Произведение |
|
|
|
|
= |
+ 5 14211 . |
|
|
|
|
|
|
16 384 |
Заказ № 2437 |
65 |
П е р в ы й ш а г . Складывая порядки сомножителей с учетом знаков, получим порядок произведения:
00,1000 ПК порядка множимого
11,1011 ДК порядка множителя
|
|
|
00,0011 |
ПК |
порядка произведения.. |
|
|||||
|
В т о р о й |
ш а г . |
Складывая коды |
знаков |
сомножителей со |
||||||
|
|
|
|
гласно таблице 3-1, получим код знака |
|||||||
|
|
|
|
произведения: |
|
|
|
|
|||
|
|
|
|
00 -I- 00 - 00. |
|
|
|
|
|||
|
Т р е т и й |
ш а г . |
Умножение |
мантисс производим согласно |
|||||||
|
|
|
|
таблице |
3-2 |
ПК |
мантиссы |
множимого |
|||
|
|
|
|
00,110111011 |
|||||||
|
|
|
|
11,001000101 |
ДК |
мантиссы |
множимого |
||||
|
|
|
|
01,101110110 |
удвоенная |
мантисса |
множи |
||||
|
Множитель |
00,11 |
01 |
10 01 |
мого. |
|
|
|
|||
|
|
|
|
|
|
||||||
I такт |
.00,000000000 |
|
«01» и «0» СС |
|
|
|
|||||
|
|
+ 00,110111011 |
|
Прибавление множимого в ПК |
|||||||
|
|
00,110111011 |
|
1 частичное произведение (ЧП) |
|||||||
|
|
00,00110111011 |
Сдвиг 1ЧП на 2 разряда вправо |
||||||||
II |
такт |
00,00110111011 |
«10» и |
«0» СС |
|
|
|||||
|
|
+ |
|
|
|
Прибавление удвоенного множи |
|||||
|
|
01,10111011000 |
мого |
|
|
|
|
||||
|
|
01,11110010011 |
|
2 ЧП |
|
|
|
|
|||
|
|
00,0111110010011 |
Сдвиг 2 ЧП на 2 разряда вправо |
||||||||
III |
такт |
,00,0111110010011 |
«01» и «0» СС |
|
|
|
|||||
|
|
+ 00,1101110110000 |
Прибавление |
множимого |
в ПК |
||||||
|
|
01,0101101000011 |
3 |
ЧП |
|
|
|
|
|||
|
|
00,010101101000011 |
сдвиг 3 ЧП на 2 разряда вправо |
||||||||
IV такт |
, 00,010101101000011 |
«11»и«0»СС установки в «1» СС |
|||||||||
|
|
11,001000101000000 |
ДК множимого |
|
|
11,011110010000011 4 ЧП
11,11011110010000011 Модифицированный сдвиг 4 ЧП на 2 разряда вправо
Конец циклического процесса
,11,11011110010000011 «00» и «1» СС ^00,11011101100000000 ПК множимого
00,10111011110000011 Мантисса произведения.
6 6
Ч е т в е р т ы й ша г . Мантиссе |
произведения приписываем |
суммарный |
порядок сомножителей и |
знак числа |
|
00.10111011110000011.00.0011. |
Проверка. 00.10111011110000011.00.0011 =00.10111011110000011X
X 2 t00U = + 101,11011110000011 = + 5 - ^ ^ .
16 384
§ 8. ДЕЛЕНИЕ ЧИСЕЛ В ЦВМ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ
Для деления чисел, заданных в нормальной форме, нужно про извести следующие действия:
а) определение знака частного путем сложения знаков делимого и делителя согласно таблице 3-1;
б) определение порядка частного путем алгебраического вычи тания порядка делителя из порядка делимого;
в) деление мантиссы делимого на мантиссу делителя, что дает мантиссу частного. Эта операция производится точно так же, как и для чисел с фиксированной запятой.
Для деления двух нормализованных мантисс, каждая из которых лежит в пределах
мантисса частного удовлетворяет условию
Y < |iV o l< 2 ’
что эквивалентно нарушению нормализации на один разряд влево.
В некоторых ЦВМ перед выполнением операции деления прину дительно нарушают нормализацию делимого вправо путем сдвига вправо на один разряд мантиссы делимого с одновременным добав лением единицы к порядку делимого. В этом случае частное может получиться с нарушением нормализации вправо на один разряд. После окончания операции происходит нормализация делимого.
Если делимое и делитель заданы прямыми кодами, то операцию деления можно начинать с вычитания мантиссы делителя из ман тиссы делимого, а инвертированный знак сумматора направлять в разряд единиц частного и только после этого циклический про цесс выполнен.
Пример 20. Найти частное двух чисел
Знак |
Мантисса |
^ нак Порядок |
числа |
|
порядка |
5* |
67 |
Делимое |
00 |
11101111111 |
00 |
ОНО |
= + 5 9 — |
||
|
|
|
|
|
|
|
32 |
Делитель |
00 |
11001010000 |
00 |
0100 |
= |
+ 12 |
— |
|
|
|
|
|
|
|
8 |
Частное |
|
|
|
• |
= |
+ 4 |
т |
|
|
|
|
П е р в ы й ш а г . Вычитая из кода порядка делимого код по рядка делителя, получим код порядка ча стного:
+ 00,0110 |
ПК |
порядка делимого |
11,1100 |
ДК |
порядка делителя |
00,0010 |
ПК |
порядка частного. |
В т о р о й |
ш а г . |
Складывая |
коды знаков |
делимого и |
дели |
||
|
|
теля согласно таблице 3-1, получим код |
|||||
|
|
знака частного: |
|
|
|
|
|
|
|
00 + 00 - |
00. |
|
|
|
|
Т р е т и й |
ша г . |
Производим деление мантисс, пользуясь ме |
|||||
|
|
тодом с восстановлением остатка: |
|
||||
|
|
00,11101111111 |
ПК |
мантиссы делимого |
|||
|
|
00,11001010000 |
ПК |
мантиссы делителя |
|||
|
|
11,00110110000 |
ДК |
мантиссы делителя |
|||
|
|
00,11101111111 |
ПК |
делимого цифры |
ман- |
||
|
|
+ |
|
ДК |
|
тиссы частного |
|
|
|
11,00110110000 |
делителя |
|
|||
|
|
------------------------ |
частного |
|
|
||
|
|
00,00100101111 |
первый оста |
|
|||
|
|
|
|
ток |
положи |
|
|
|
|
|
|
тельный |
01 |
|
|
|
|
00,01001011110 |
Сдвиг остатка |
|
|||
|
|
|
|
влево |
на |
|
|
|
|
|
|
1 разряд |
|
|
|
|
|
11,00110110000 |
ДК |
делителя |
|
||
|
|
11,10000001110 |
Остаток отри |
|
|||
|
|
|
|
цательный |
|
|
|
|
|
|
|
01,0 |
|
|
|
, 11,10000001110 |
Восстановление остатка |
|
|
||||
+00,11001010000 |
ПК делителя |
|
|
|
|
||
00,01001011110 |
Восстановленный остаток |
(ВО) |
|
68
,00,10010111100 |
Сдвиг ВО на 1 разряд влево |
|
|
+11,00110110000 |
ДК делителя |
|
|
11,11001101100 |
Остаток отрицательный |
01,00 |
|
,11,11001101100 |
Восстановление остатка |
|
|
+00,11001010000 |
ПК делителя |
|
|
00,10010111100 |
ВО |
|
|
,01,00101111000 |
Сдвиг ВО на 1 разряд влево |
|
|
+11,00110110000 |
ДК делителя |
|
|
00,01100101000 |
Остаток положительный |
01,001 |
|
00,11001010000 |
Сдвиг остатка на 1 разряд |
|
|
+ |
влево |
|
|
11,00110110000 |
ДК делителя |
|
|
00,00000000000 |
Остаток равен |
0 |
01,0011 |
Конец циклического |
процесса . |
|
Ч е т в е р т ы й ш а г . При делении мантисс произошло на рушение нормализации влево. Для восстановления нормализации резуль тирующую мантиссу сдвигаем на один разряд вправо, а порядок частного увеличиваем на единицу:
01,0011 - 00,10011
00,0010 -'г 00,0001 = 00,011.
Пя т ы й ш а г . Получаем следующее частное:
00.10011.00.0011.
Проверка. |
00.10011.00.0011 = 00,10011 ■2+011 = +100,11 = |
+ 4 ~ . |
|||||
Пример 21. Найти частное двух чисел |
|
|
|
||||
|
Знак |
Мантисса |
Знак |
Порядок |
|
||
|
числа |
порядка |
|
||||
|
|
|
|
|
|||
Делимое |
И. |
|
110010101011. |
00. |
111 |
= —101 — |
|
|
|
|
|
|
|
|
32 |
Делитель |
00. |
|
100011010000. |
00. |
101 |
= + |
17 — |
|
|
|
|
|
|
|
8 |
Частное |
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
П е р в ы й |
ша г . Вычитая |
из кода порядка делимого код |
|||||
|
|
|
порядка делителя, получим код порядка |
||||
|
|
|
частного: |
|
|
|
|
69