Бикмухаметов_-_Учебное_пособие_по_МАиМУ
.pdf71
Контрольные вопросы.
1.За счет чего ускоряется деление в алгоритме без восстановления остат-
ка?
2.Почему в RG2 используются два знаковых разряда?
3.Каким образом формируется знак F?
4.В каком случае округление частного приводит к ПРС?
5.Почему при делении дробей значение RG2(1) не выдается на шину Z?
6.В чем суть 1-го и 2-го этапов проверки на ПРС?
7.В каком случае формируется остаток от деления с избытком?
8.Почему в циклах деления не выполняется проверка на ПРС?
9.Почему при разных знаках G и E требуется коррекция частного?
10.Почему частное увеличивается на 1, если G<0, E<0 и B=0? 11.Почему в KSM не используются два знаковых разряда, как в RG2? 12.Какую роль выполняет знаковый разряд с номером (m+1) в RG2? 13.Почему в ОС введен дополнительный триггер знака Tзн? 14.Почему делить нельзя, если G<0, E<0 и G1=0?
15.Каким образом формируется знак F?
16.Почему 2 старших разряда в Gдоп совпадают, если |G|< 22m?
72
Глава 5. Операции над числами с плавающей запятой.
В форме с плавающей запятой любое число, например, A = MA qP, где:
MA- мантисса числа − n-разрядная дробь со знаком, как правило, в прямом коде;
PA – порядок числа, oпределяющий положение запятой в числе − m-
разрядное целое число со знаком, например, в дополнительном коде; q – основание порядка, равное 2S, где s – целое.
Так как q одинаково для всех чисел, то в разрядную сетку процессора оно не вводится. В процессор поступают мантиссы и порядки операндов, oперации над которыми выполняются раздельно в блоках мантисс и порядков соответ-
ственно.
Так как мантиссы и порядки представляются в форме с фиксированной запятой, то: во-первых, операции над ними выполняются по алгоритмам, рас-
смотренным ранее; во-вторых, основу блока мантисс и блока порядков со-
ставляет трехрегистровая схема, которая использовалась ранее. Обозначим узлы этих блоков следующим образом:
Рис. 5.1.
73
Особенности операций с плавающей запятой
1)Условие нормализации: 1 > |M| ≥ 1 ⁄ q
Левая часть неравенства введена во избежание ПРС в разрядах мантиссы,
правая – для повышения точности вычислений ( означает, что в старших S
разрядах |М| должна быть хотя бы одна единица). Далее полагаем, что ман-
тиссы операндов нормализованы, а любая операция заканчивается автомати-
ческой нормализацией результата.
2)При выполнении операций с плавающей запятой могут быть слу-
чаи:
а) нарушения нормализации влево, если модуль мантиссы результата
|Мрез| ≥ 1;
б) нарушения нормализации вправо, если |Мрез| < 1⁄q;
в) потери значимости, если Mрез = 0;
г) переполнения порядка, если Ррез>Pmax=(2m−1);
д) исчезновения порядка, если Pрез<Pmin=(−2m) .
В случае а) выполняется нормализация вправо, т.е., |Мрез| сдвигается
s
вправо на s разрядов (|Мрез|), а к Ррез прибавляется единица.
S
В случае б) выполняется нормализация влево, т.е ., |Мрез|, а из Pрез вычитается единица. Указание действия выполняются до тех пор, пока в старших s раз-
рядах |Мрез| не появится хотя бы одна единица. Если Мрез= 0, то нормализация влево невозможна. В этом случае, называемом потерей значимости, резуль-
тату присваивается значение машинного ноля, равное 0qPmin. Таким обра-
зом, при потере значимости Pрез:=Рmin .
Если операции над порядками выполняются по способу 1б, то призна-
ком переполнения порядка является комбинация 0 1 в 2-х знаковых разрядах,
а признаком исчезновения порядка – комбинация 1 0. В первом случае триг-
гер переполнения порядка Тпп:=1, и операция не выполняется; во втором слу-
чае результату присваивается значение машинного ноля, т.е. Мрез:=0, Ррез:=
Рmin .
74
Алгебраическое сложение-вычитание с плавающей запятой (F = C ± D)
При сложении-вычитании предварительно выравниваются порядки операн-
дов путем сдвига вправо мантиссы числа с меньшим порядком. Например,
если C>D, то
В ОС (рис. 5.2) предполагается, что операции над мантиссами вы-
полняются по способу 3в, а над порядками – по способу 1б. Перед началом операции: RGM2: = MC; RGP1: = PC; RGM3: = MD; RGP3: = PD . Далее вы-
полняются 5 этапов.
1-й этап. Выравнивание порядков а) RGP2 : = PC ;
б) RGP2 : = PC− PD = ΔP ;
в) T1 : = знак Р = RGP2(m+1); T2 : = 1, если |ΔР| > 1 ;
г) Сдвиг вправо модуля мантиссы числа с меньшим порядком:
75
s
Если P > 0, то |MD|, а из RGP2 вычитается единица. s
Если P < 0, то |MC|, а к RGP2 прибавляется удиница.
Указанные действия повторяются до тех пор, пока RGP2 не обнулится.
Замечание. Если на 1-м этапе |ΔP| > ││, то мантисса одного из операн-
дов полностью выдвигается за пределы разрядной сетки и становится, та-
ким образом, равной 0. В этом случае результату можно сразу присвоить значение другого операнда с соответствующим знаком.
Для реализации правил (5.1) можно использовать один из двух способов.
1-й способ. Путем дешифрации значения Р формируется сигнал состоя-
ния P = (|ΔP| > ││) , анализируемый в МП.
2-й способ. Вводится специальный счетчик числа сдвигов мантиссы на 1-
м этапе, в который предварительно записывается значение (││+1), и по-
сле каждого сдвига вычитается 1. При обнулении счетчика реализуются правила (5.1).
2-й этап. Восстановление старшего порядка.
RGP2 : = PF = PC , если PC ≥ PD (RGP2:= RGP1, если Т1=0)
Р0 , если PC < PD (RGP2:= RGP3, если Т1=1)
3-й этап. Сложение-вычитание мантисс по способу 3в, например, наугад.
Коррекция результата вычитания может понадобиться лишь при Р=0. В
остальных случаях бóльшая по абсолютной величине мантисса определя-
ется по состоянию Т1. Если сдвигалась МС в RGM2 (T1=1), то выполняют-
ся МО: RGM2:=RGM2 , а затем |RGM2|:=|RGM2|+|RGM3|+2−(n+s). Если сдвигалась MD в RGM3 , то выполняется МО:
|RGM2|:=|RGM2|+|RGM3|+2−(n+s) .
76
Если при этом Tпер=0, то результат корректируется.
4 этап. Округление МF до n разрядов после запятой, если |ΔP| > 1.
Замечания. а) Округление выполняется потому, что на 1-м этапе одна из мантисс сдвигается вправо, и еѐ младшие разряды теряются.
б) Если |ΔР|=0, то округление не выполняется, так как сдвига на 1-м этапе нет.
в) Если |ΔР|=1, то округление также не выполняется. В этом случае одна из мантисс сдвигается вправо на s разрядов, и, чтобы не допустить потери ни одного разряда, RGM2, KSMM и RGM3 увеличиваются справа на s
разрядов. Все это делается потому, что при |ΔР|=1 нарушение нормализа-
ции вправо может быть на значительное количество разрядов (вплоть до
младшего разряда), и, следовательно, погрешность, вводимая при округ-
лении, может оказаться сравнимой со значением мантиссы числа.
г) Если |ΔР|>1, то нарушение нормализации вправо может быть не более,
чем на s разрядов. Например, пусть q=2; F C D , p 2 , мантиссы нор-
мализованы, т.е. |MС| и |MD| не меньше ½. Так как P=2, то на 1-м этапе
|MD| сдвигается вправо на 2 разряда и становится таким образом меньше
¼. Тогда |MF|=|MC| − |MD| будет больше ¼, т.е. нарушение нормализации вправо может быть не более, чем на 1 разряд.
5-й этап. Нормализация результата.
Пример построения таблицы состояний узлов ОС приведен на рис. 5.3.
Здесь q=2, n=5, m=3, F=C+D, C= −3= −11,111, D= +4¼= +100,01
Предварительно С и D записываются в нормализованной форме с пла-
вающей запятой.
C= −11,111=−0,11111·22 |
MC=1.11111 |
RGM2; PC=0.010 |
RGP1. |
D=+100,01 = +0,10001·23 |
MD=010001 |
RGM3; PD=0011 |
RGP3. |
77
Рис. 5.3.
Умножение чисел с плавающей запятой.
Здесь порядки складываются, а мантиссы перемножаются. В целом процеду-
ра умножения включает 6 этапов.
1)Суммирование порядков: PG = PE + PF
2)Анализ результата лишь на исчезновение порядка. Анализ на перепол-
нение порядка переносится на конец операции умножения. Дело в том,
что в MG может быть нарушение нормализации вправо на S разрядов.
Тогда |MG| сдвигается влево на S разрядов, из PG вычитается 1, и пере-
полнения порядка, возникшего на 1-м этапе, может не стать.
3)Умножение мантисс: |MG|=|ME|·|MF|
4)Если |MG| < 1⁄q, то |MG| сдвигается влево на S разрядов, из PG вычитает-
ся 1, и выполняется анализ PG на исчезновение порядка.
5)Анализ PG на переполнение порядка.
6)Округление |MG| до n разрядов после запятой и формирование знака G.
78
Пример таблицы состояний регистров ОС умножения приведен на рис. 5.4. Здесь q = 2, n = 5, m = 3, E = +5, F = −17, мантиссы перемножают-
ся в прямом коде, порядки складываются по способу 1б.
E = +5 = +101= +0,101·23 |
ME =010100 |
RGM3 |
F = −17= −10001= −0,10001·25 |
PE = 0011 |
RGP2 |
MF =110001 |
RGM1 |
|
|
PF = 0101 |
RGP3 |
Рис. 5.4.
Деление чисел с плавающей запятой.
Здесь порядки вычитаются, а мантиссы делятся. В целом операция вклю-
чает 6 этапов.
1)Вычитание порядков: PF = PG− PE
2)Анализ PF лишь на переполнение порядка. Анализ на исчезновение по-
рядка переносится на следующий этап пробного вычитания мантисс.
3)G0 = |MG|− |ME|. Если G0 ≥ 0, то это означает, что |MF|≥1, т.е. нарушение нормализации влево. Тогда:
а) восстанавливается |MG|: (G0 + |ME| = |MG|,
б) |MG| сдвигается вправо на S разрядов,
79
в) к PF прибавляется 1; или, что проще и быстрее (но только при q = 2):
а) результат пробного вычитания используется как результат 1-го цикла деления, т.е. первой цифре после запятой в |MF| присваивается значение 1;
б) из счетчика циклов деления СТ вычитается 1;
в) к PF прибавляется 1.
4)Формирование знака F.
5)Выполнение циклов деления для определения цифр |MF| в соответствии с содержимым счетчика циклов деления.
6)Округление |MF| до n разрядов после запятой.
Пример таблицы состояний регистров ОС деления представлен на
рис. 5.5. Здесь q = 2, n = 5, m = 3, G = + |
, E = −12. |
|
|
G = + |
= + 0, 00000111= + 0,111·2−5 |
MG = 011100 |
RGM2 |
|
|
PG = 1011 |
RGP2 |
E = −12 = −1100 = − 0,11·24 |
ME = 111000 |
RGM3 |
|
|
|
PE = 0100 |
RGP3 |
Пусть мантиссы делятся в прямом коде без восстановления остатка, при-
чем RGM2 : = знак G.0.|MG|; порядки вычитаются по способу 1б.
80
Рис. 5.5.
Замечания к примеру на рис. 5.5.
1)Если бы G0 было меньше 0, то результату присвоилось бы значение машинного ноля.
2)Если бы на 1-м этапе не было исчезновения порядка и G0 было бы меньше 0, то далее выполнились бы 6 циклов деления, а не 5 циклов,
как в данном примере.
Представление мантисс чисел с плавающей запятой с неявным старшим битом, равным единице.
Для повышения точности вычислений (или для увеличения числа знача-
щих бит в мантиссе) модули мантисс должны удовлетворять условию:
|M| ≥ В результате нет потери точности из-за хранения старших ну-
лей. Например, вместо мантиссы 0,00001101…11 лучше использовать
(при q = 2) мантиссу 0,1101…110000, уменьшив порядок числа на 4. Если q = 2, то можно пойти дальше и представлять мантиссы чисел с единицей