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

Бикмухаметов_-_Учебное_пособие_по_МАиМУ

.pdf
Скачиваний:
81
Добавлен:
22.03.2016
Размер:
2.68 Mб
Скачать

71

Контрольные вопросы.

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, то можно пойти дальше и представлять мантиссы чисел с единицей