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

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

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

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

Для подсчетов полного времени выполнения сложения-вычитания с плавающей запятой заметим еще, что если при выравнивании порядков было выполнено хотя бы два сдвига вправо, то при нормализации результата потребуется не более одного сдвига влево. Скажем, если при выравнивании порядков мантисса С была сдвинута на 2 разряда вправо, то IСI lt; /4; так как при этом В1 gt; /2, то \B\~\C\ gt;V,.

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



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

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

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

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

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

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

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



триггере будет храниться старшая из выдвинутых тфр обратного кода. Далее при выполнении суммирования на вход переноса младшего разряда будет подаваться та цифра, которая хранится в этом специальном триггере.

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

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

Аналогичное положение получится и при вычитании.

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

Заметим, что, вообще говоря, и распределение ошибок теперь более благоприятно. Хотя мы сочли, что в схеме без округления средняя ошибка равна нулю, но это было справедливо только при условии, что знаки laquo;+ raquo; и laquo;- raquo; у чисел равновероятны. Если бы, скажем, вычислялась сумма ряда положительных чисел, то при отсутствии округления наверняка накопилась бы значительная отрицательная погрешность. При наличии округления, выполняемого указанным методом, этого нет.

Если при нормализации результата вновь производится сдвиг мантиссы результата вправо, то осуществить вслед за этим округление аналогичным способом было бы затруднительно. Дело в том, что сдвиг вправо при нормализации



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