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

Далее следует возвести в квадрат первую цифру результата и вычесть ее из величины, представленной старшими разрядами подкоренного выражения. В рассматриваемом устройстве для выполнения этих операций мы либо заканчиваем первый цикл на формировании единиц двоичного переноса (если 1 = 0), либо доделываем до конца суммирование, выполняя вьщачу суммы в регистр В (если = 1). В первом случае из величины, находящейся в В, мы фактически не вычли ничего, или, иными словами, вычли (Я (Ci = 0). Во втором случае добавление .111...Г11 эквивалентно вычитанию .000...001 (так как .111...Г11 есть дополнительный код от величины .000...001); таким образом, и в этом случае фактически вычитается квадрат первой цифры результата {с = Р = 1). В любом случаев регистре В образуется .первый остаток {В.

Для отыскания второй цифры корня в соответствии со laquo;школьным raquo; алгоритмом нужно выполнить следующие операции. К первому остатку {В нужно снести (т. е. приписать, справа) две очередные цифры подкоренного выражения; величину, которая при этом образуется, обозначим В[. Найденную ранее цифру корня нужно удвоить и к ней приписать справа максимально возможную цифру-такую, чтобы при умножении величины, которая получится при этом, на приписанную цифру произведение было меньше, чем В{. Эта цифра и будет второй цифрой корня.

В двоичной системе удвоение первой цифры корня можно осуществить приписав к ней справа 0. Вторая цифра корня может быть либо нулем, либо единицей. Если вторая цифра корня есть О, то величина, образованная путем приписки нуля справа от удвоенной первой цифры корня, имеет вид laquo;аОО raquo;; если вторая цифра корня есть 1, то аналогичная величина имеет вид laquo;ai01 raquo;, а при умножении этой величины на, приписанную справа цифру (т. е. на 1) получим ее же. Таким образом, в двоичной системе для определения второй цифры корня достаточно сравнить величину laquo;ai01 raquo; с Bl. если CiOl большеВ, то вторая цифра корня {а есть О, в противном случае I.

В рассматриваемом устройстве указанные операции выполняются в следующем порядке. В регистрах Л и В производятся два сдвига влево; при этом первый остаток передвигается в основные разряды регистра В, а справа к нему



(в. допол нительных разрядах) подписываются две очередные цифры подкоренного выражения; таким образом, в ре-гистреВ образуется величина В{. В регистреС производится один сдвиг влево, причем в младший разряд вдвигается в обратном коде первая цифра корня (а); поскольку во всех старших разрядах регистра С сохраняются единицы, а в несуществующих дополнительных разрядах С как бы закреплена комбинация laquo;11 raquo; (эти цифры поданы на входы с дополнительных разрядов сумматора), то в регистре С образуется величина П.-Ла/П, которая является дополнительным кодом величины 00...0ai01. Далее вьшолняется формирование сигналов двоичного переноса. Если величина OiOl больше Bi, To i= 0; вторая цифра корня при этом О, а в регистре В сразу находится второй остаток (В2 = Вг).

Если aOl меньше В i, тоЕ = 1; вторая цифра корня при этом 1, а для получения второго остатка в регистре В необходимо доделать до конца суммирование, произведя выдачу суммы в регистр В; при этом фактически произойдет вычитание величины GiOl из В[.

Для получения третьей цифры корня нужно снова произвести два сдвига влево в регистрах А и В, один сдвиг влево в регистре С (причем в младший разряд С вдвигается laquo;2 - вторая цифра корня в обратном коде) и затем сформировать сигналы двоичного переноса и т. д.

Таким образом, процесс извлечения квадратного корня сводится к повторению однообразных циклов, каждый из которых включает 2 сдвига в регистрах А и В, один сдвиг в регистре С, сравнение содержимого регистров В и С и, если необходимо, вычитание (точнее, суммирование с обратным кодом).

Первый цикл формально тоже не отличается от всех последующих, хотя смысл операций в нем иной. Для получения т цифр корня нужно выполнить mтаких циклов; при этом в течение последних /п/2 циклов из регистра Л в младшиеразряды регистра В будут передвигаться нули. Результат операции в обратном коде получается в регистре С, куда мы каждый раз рдвигаем в обратном коде очередные цифры корня. Произведя в конце обращение кода С, можно получить значение корня в прямом коде.



Пример. Извлечь корень из числа 25/64 (результат должен быть 5/8).

= .0П001

25 64 5 8

= .101000

Для примера предположим, что регистры содержат по 6 разрядов (не считая 2 дополнительных разрядов справа); для получения 6 цифр корня нужно выполнить 6 циклов, описанных выше:

1-й цикл

после 2 сдвигов А н В:

в регистре В

в регистре С

-OOOOOOOl

.111111(11)

после выдачи суммы в В: в регистре В - величина Bi

i = l (ai=l) .ОООООООО

2-й цикл после 2 сдвигов А к В: в регистре В - величина В после сдвига в С

.ООООООЮ .111110 (11)

l = 0 (02 = 0)

3-й цикл

после 2 сдвигов А к В:

в регистре В -величина В

после сдвига в С

.000010Ol .111101 (11)

i =

после выдачи суммы в В: в регистре В - величина Bs

1 ( laquo;3 = 1)

ОООООООО

4-й цикл после 2 сдвигов А и В: в регистре В - величина Bg после сдвига в С

.ОООООООО .111010(11)

i = 0 (а4 = 0)

(первая цифра корня в обратном коде)

(вторая цифра корня . в обратном коде)

(третья цифра корня в обратном коде)



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