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

по модулю легко свести к выполнению алгебраического сравнения.

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

Пусть имеем два числа, Р и -у, записанные с плавающей запятой. Для определенности предположим, что мантиссы чисел (соответственно В и С) записываются, как обычно, прямыми кодами, порядки (Ьис) - дополнительными кодами. Существенно, что числа Р и -у нормализованы.

Условимся, кроме того, что дополнительные коды для представления порядков построены по второму варианту, т. е. что знак laquo;+ raquo; изображается цифрой laquo;1 raquo; в знаковом разряде, а знак laquo;- raquo; - Цифрой laquo;О raquo;. Напомним (см. 1.3.2), что при этом изображением любого числа х является фактически величина бо + где бо - вес знакового разряда; этим обстоятельством мы только что пользовались в 3.3.3. Для любых X величины 8о -\- х положительны.

Теперь поступим следующим образом. Запишем подряд, слева направо, сначала изображение порядка b числа Р (в том числе, слева от других разрядов, и алгебраический знак порядка), затем основные разряды его мантиссы В и затем где-нибудь отдельно алгебраический знак мантиссы. Будем считать, что таким образом мы получим изображение в прямом коде некоторого числа с фиксированной запятой, р; число Р содержит 1 + .р s основных разрядов (разряд знака порядка, р - количество основных разрядов в изображении порядка числа Р, s - количество основных разрядов в изображении мантиссы), а разряд знака мантиссы числа р является также разрядом знака для Р.

Возьмем для примера какое-нибудь число Р; скажем, Р = - Vie =2 2 (- зд). Предположим для простоты, что разрядная сетка порядков содержит 3 основных разряда и разряд знака,. а разрядная сетка мантисс - четыре

*) Этот метод, предложенный автором настоящей книги, был впервые реализован в вычислительной машине М-2 (см. laquo;Быстродействующая вычислительная машина М-2 raquo;, под ред. И. С. Брука, Гостехиздат, 1957, стр. 56).



основных разряда и разряд знака. Применяя дополнительный код, построенный по второму варианту, получим изображение порядка ф =-2) в виде ОНО (слева находится разряд знака порядка с весом бо =8; изображение порядка b = - 2 является фактически числом бо + Ь = 8+(-2) =6. Мантисса {В = У4) в прямом коде изображается в виде . 1100.

Итак, число Р представлено в системе с плавающей запятой в виде

ОНО .1100

Соответствующее число Р есть. 01101100- (т. е. Р =-Vei)-Точно таким же образом поступим с числом у, причем получим число с фиксированной запятой у.

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

Действительно, знаки у чисел Р и у те же, что и у чисел Р и -у. Следовательно, нам остается только проверить, что равенству Р =171 соответствует равенство IР I ==17!, соотношению Р gt; \у\ - соотношение Р gt; gt; I y I и соотношению j р lt; v - соотношение Р lt;

lt;1т1-

Случай равенства очевиден; если р =у,т. е. если b = с и В = С, то совпадают все разряды величин р и у и, следовательно, Р =у.

Неравенство Р gt; \у\ возможно либо при условии, что Ь gt; с (поскольку числа нормализованы, то мантиссы их при этом не играют роли)-, либо при условии, что b - с, но \В\ gt; \С\. В первом случае в (\-\- р) старших разрядах числа IPI содержится большая величина, чем в соответствующих разрядах числа \у\; при этом Р gt; Ivl независимо от содержимого младших разрядов. Во втором случае старшие разряды чисел Р и \у \ совпадают между собой, но в S младших разрядах числа Р содержится большая величина, чем в соответствующих разрядах -у; следовательно, снова получаем IPI-ItI.

Точно так же доказывается, что неравенству Р lt;Т всегда соответствует неравенство Р lt;y-



Подмена сравнения с плавающей запятой сравнением с фиксированной запятой не требует почти никаких усложнений в арифметических цепях. Скажем, если идет речь о параллельных устройствах, единственное, что требуется для этого - это обеспечить передачу сигнала переноса с выхода старщего разряда сумматора мантисс навход младщего разряда сумматора порядков. С полученным таким образом (1 + s + р)-разрядным параллельным сумматором, как и с регистрами Р и -у, нужно будет обращаться, конечно, как с единым целым; например, если выполняется суммирование, то оно выполняется по всем разрядам одновременно, если обращается код Р, то обращение производится одновременно и в разрядах порядка Ь, я в разрядах мантиссы В.

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

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

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

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



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