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

5. Деление, извлечение квадратного корня и другие операции

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

Решение вопроса о целесообразности наличия той или иной операции в универсальной машине во многих случаях затруднительно. Например, в отношении операции деления можно было бы рассуждать так. Если деление не предусмотрено в качестве отдельной операции, то оно может осуществляться путем итерационного процесса, включающего сложения, вычитания и умножения, по специальной подпрограмме; такая подпрограмма содержит, может быть, 15-20 операций (что зависит от необходимой точности, системы команд и других обстоятельств). Полагая, что деление будет встречаться в среднем один раз на 20 операций (5% делений из общего числа операций), найдем, что отсутствие деления снизило бы эффективную скорость машины примерно вдвое: вместо каждых 20 операций пришлось бы выполнять 3-40 операций. С другой стороны, программисты, долго работающие на машинах без деления, утверждают, что деление в действительности необходимо значительно реже. Точно так же программисты, работающие на специализированной машине, в которой в качестве отдельной операции было предусмотрено извлечение квадратного корня, высказывали мнение, что эта операция и в



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

Как правило, при осуществлении в качестве отдельных операщ1Й деления, извлечения квадратного корня и т. п. ставятся в основном следующие задачи:

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

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

raquo; Вопрос о выборе списка операций рассматривается также в разделе 5.2.4.

5.1. Деление

5.1.1. Двз основных метода выполнения деления в двоичной системе и два варианта их осуществления. Мы рассмот-. рим сейчас методы выполнения деления чисел с фиксированной запятой или мантисс нормализованных чисел с плавающей запятой. Будем считать пока, что в любом случае все числа представлены прямыми кодами.

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

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

заключены в интервале (-g, 1) и, следовательно, отличаются друг от друга менее чем вдвое. Если числа ненор-.



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

(б) удвоить предыдущий остаток;

(в) сравнить удвоенный предыдущий остаток с делителем; образовать очередную цифру частного и новый остаток по правилам, аналогичным (а);

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

Пример. 15/32 : 3/4 = 5/8 (все числа с пятью двоичными знаками),

15/32 = .01111,

3/4 = 24/32 = .11000,

5/8 = 20/32 = .10100.

Удвоение 1-го остатка

2-й остаток

.01111 .11110 .11000

.00110

.11000

0.10100...

удвоение 2-го остатка (3-й остаток) .01100

удвоение 3-го- остатка

4-й остаток .00000

удвоение 4-го остатка (5-й остаток) .ОООДО

.11000 .11000

удвоение 5-го остатка (6-й остаток) .00000

Описанный алгоритм можно реализовать, например, в схеме, изображенной на рис. 5-1,с. Устройство состоит из трех регистров (А, В и С) и параллельного сумматора, включенного между регистрами В и С так, что входы сумматора соединены с регистрами Б и С, а с выхода сумматора число передается в регистр В, где замещает одно из слагаемых; в регистрах В и С имеются цепи для сдвига влево на



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