www.chms.ru - вывоз мусора в Балашихе 

Динамо-машины  Обратные коды 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 [ 103 ] 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189

Начнем с выравнивания порядков.

Прежде всего на этом этапе должна вычисляться разность порядков.

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

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

Проще всего .это затруднение можно обойти, введя по одному лишнему разряду в сумматоре порядков и в регистрах, связанных с ним. В последовательном варианте вместо добавления лишнего разряда в сумматоре вводится лишний такт при суммировании порядков.

Если при изображении порядков принят дополнительный код (скажем, для определенности, по первому варианту, когда laquo;+ raquo; изображается цифрой laquo;О raquo;, а laquo;- raquo; - цифрой laquo;1 raquo;),-то добавочный разряд помещается слева от разряда знака. При приеме чисел из памяти (конечно, без добавочного разряда) в добавочном разряде устанавливается такая же цифра, какая принята в знаковый разряд. При этом можно считать, что знаковый разряд теперь имеет свой естественный вес +2 , где р - количество основных



разрядов порядка (вместо веса - 2р, как предполагалось раньше), а добавочный разряд - вес - 2р+. Что от этого ничего не меняется в положительных числах, очевидно сразу: оба эти разряда содержат нули, и

0-(- 2Р+1) + 0-(+ 2Р) = 0-(+ 2Р) = 0.

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

1-(-2Р+1) + 1.(2Р) = 1-(-2Р) = -2Р.

Зато в разрядах порядков как бы добавляется один лишний основной разряд - с весом 2р, а роль разряда знака выполняет теперь новый, добавочный разряд.

Далее перед началом сдвигов мантиссы необходимо проверить, каков алгебраический знак разности порядков. Если выполнялось вьиитание b - си разность положительна, то это означает, что сдвигать вправо нужно будет С (мантиссу числа у), потому что b gt; с; если b - с lt; о, то сдвигать вправо нужно будет В (мантиссу числа р).

Имеет смысл также проверить заранее, не слишком ли велика разность порядков. Если разность порядков по абсолютной величине превышает количество разрядов в мантиссе, то выполнение сдвигов в разрядах мантиссы было бы просто лишней потерей времени: мантиссу числа с меньшим порядком нужно сразу погасить (установить laquo;о raquo;); при сдвигах все цифры мантиссы все равно ушли бы за пределы регистра.

Выяснение этого обстоятельства не вызывает трудностей, если количество разрядов в мантиссе является целой степенью двойки без единицы. Например, если мантисса содержит 31 разряд (2* - 1), то признаком превышения разностью порядков количества разрядов в мантиссе является наличие единицы в 6-м разряде разности порядков (его вес равен 2) или единиц слева от него. Если применяются дополнительные коды, то для отрицательной разности порядков нужно было бы, наоборот, проверять наличие нулей в 6-м разряде или слева от него; последнее, однако, не совсем точно, так как наименьшее по абсолютной величине отрицательное число с нулем в 6-м разряде есть - 33, а не -32.



Но и когда количество разрядов в мантиссе является каким-нибудь другим числом, отличным от 2*-1, можно пользоваться аналогичным упрощенным критерием. Например, в вычислительной машине М-2 мантиссы содержали 26 основных разрядов, но сдвиги мантиссы заменялись гашением только при условии, что разность порядков по абсолютной величине больше или равна 32. Нри этом в сравнительно редких случаях (когда разность порядков равна 27, 28, 29, 30 или 31) тратится лишнее время на выполнение сдвигов,- зато отпадает необходимость в сравнении разности порядков с числом 27, что нужно было бы делать каждый раз и что занимало бы по длительности примерно столько же, сколько одно суммирование порядков.

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

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

Ясно, что разность порядков вообще может оказаться слишком большой по абсолютной величине по сравнению с количеством разрядов мантиссы только при условии, что

log2S lt;p,

где s - количество основных разрядов в разрядной сетке мантиссы, р- количество основных разрядов в разрядной сетке порядков. Однако это условие почти всегда выполняется при проектировании машин с плавающей запятой?



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 [ 103 ] 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189