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

разрядной сетке машины сомножители будут размещены в виде

.3842 X .4236.

Произведение этих чисел равно 0,16274712; в разрядной сетке машины смогут разместиться 4 старших разряда произведения в виде

.1627,

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

Совсем другая картина получилась бы, если бы запятая была зафиксирована где-нибудь в другом месте. Предположим, например, что запятая фиксируется справа от младшего из разрядов разрядной сетки; при этом младший разряд бьш бы первым разрядом целой части числа, машина оперировала бы только с целыми числами. Чтобы исходные числа рассматриваемого примера разместились в разрядной сетке с наибольшим числом значащих цифр, нужно бьшо бы первое из них Ёвести с коэффициентом 10, второе - с коэффициентом Ю**. Но тогда произведение

3842. X 4236.

получится слишком большим и выйдет за пределы разрядной сетки. Чтобы этого не произошло, нужно для первого сомножителя выбрать масштаб 1, для второго 10; исходные числа (с учетом округления) разместятся в разрядной сетке в виде 0038. и 0042.; их произведение получится равным 1596. С коэффициентом 10 это число должно представлять искомый результат; но точность его получилась очень низкой.

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

Подготавливая задачу для решения на машине с фиксированной запятой, программист должен очень тщатель-



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

В этом и состоит основной недостаток фиксированного расположения запятой.

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

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

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

а = п deg;Л,

где 1 gt;Л I gt; 1/п. Например, в десятичной системе число 462,83 может быть представлено в виде 10 -0,46283, число



0,0046283 - в виде lO -0,46283 и т. д. Исключение часто делают для числа нуль, для которого принимается Л = 0.

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

Условие, принятое нами относительно мантиссы,

1 gt;\А\ gt;\/п

означает, что старший из основных разрядов мантиссы (с весом 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