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.1.7. Выполнение деления с учетом алгебраических знаков и деления чисел с плавающей запятой (применительно к двоичной системе).

1 deg;. Как и при выполнении умножения, деление с учетом алгебраических знаков не вызывает никаких трудностей в том случае, когда для изображения отрицательных чисел используются прямые коды. Интересно, однако, отметить, что наиболее часто применяемый алгоритм деления - деле-иие без восстановления (по терминологии, принятой в 5.1.1, laquo;второй способ raquo;) является по существу аналогом метода выполнения умножения путем последовательного преобразования множителя, который был описан в 4.7.4 (метод Booth и Booth). Поэтому и в дополнительных кодах вы-шолнение деления не вызывает особых затруднений.

Правило выполнения деления по второму методу, сфор-:мулированное в 5.1.1 на стр. 499, можно обобщить для работы с числами разных знаков при использовании дополнительных кодов следующим образом:

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

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

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

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

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



Пример. -Ь 15/32: (- 3/4) = - 5/8, 15/32 = 0.01111,

- 3/4= 1.01000,1 ,

- 5/8 = 1 01100 I (даполнительные коды).

Так как знаки делимого и делителя различны, знак результата laquo;- raquo; (1*-*****...). По этой же причине первая операция - сложение

, 0.01111

+1.01000 gt;

1.10111 -1-й остаток.

Знаки 1-ГО остатка и делителя одинаковы. Поэтому старшая значащая цифра результата laquo;1 raquo; (И.*****...), а следующая операция - вычитание. Эти и последующие операции запишем, как принято обычно, laquo;углом raquo;, причем вместо вычитания делителя будем каждый раз производить сложение с его дополнительным кодом (т. е. с величиной 0.11000 = + 3/4):

добавление делители 1-й остаток удвоение 1-го остатка вычитание делителя 2-й остаток удвоенне 2-го остатка добавление делителя 3-остаток

удвоение 3-го остатка вычитание делителя 4-й остаток удвоение 4-го остатка добавление делителя 5-й остаток удвоение 5-го остатка вычитание делителя 6-й остаток

, 0.01111 + 1.01000 1.10111

1.01000

11.01011.

,11.01110 + 0.11000 0.00110

гОО.ОПОО 1.01000

1.10100 11.01000 0.11000 0.00000 . 00.00000 + 1.01000 1.01000

,10.10000 -г 0.11000 1.01000

Заметим, что результат получился у нас с погрешностью в единицу младшего разряда,



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

2 deg;. Выполнение деления чисел с плавающей запятой, каки выполнение умножения с Плавающей запятой, не вызывает особых трудностей.

Если

Р : Г - 2- (В : С).

Таким образом, порядок частного равен разности порядков делимого и делителя, а мантисса частного - частному от деления мантисс делимого и делителя.

Если исходные числа нормализованы, так что

72 lt;В lt;1 и 1/2 lt;С lt;1,

1/2 lt;В:С lt;2.

Для нормализации результата может потребоваться сдвиг мантиссы результата на 1 разряд вправо (т. е. деление ее пополам); одновременно нужно, конечно, добавить единицу к порядку результата. Во многих случаях удобно вместо выполнения сдвига мантиссы результата вправо заблокировать последний сдвиг мантиссы влево (если по ходу деления в каждом цикле частное сдвигается на 1 разряд влево - см., например, схемы рис. 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