6.6 Арифметика смещенных порядков
При выполнении операций с числами в форматах с плавающей точкой вычисляют мантиссы и порядки результата. Совокупность правил и операций, выполняемых над порядками, называют Арифметикой порядков. В их числе сложение и вычитание, сравнение порядков, оценка выхода порядка за границы предельных значений и др.
В этом подразделе рассматривается арифметика порядков, прежде всего для распространенного в практике случая, когда порядок в формате представлен смещенным порядком
. (6-16)
Во вводной части раздела 5 рассматриваются два варианта смещения порядка числа с плавающей точкой. В первом варианте смещение , а во втором , где – индекс старшего значащего разряда целого порядка со знаком. Стандарт IEEE 754 применяет . В формате одинарной точности при значение . В формате двойной точности и . В специализированных вычислителях, не удовлетворяющих требованиям стандарта IEEE 754, может быть выбрано смещение . Тогда при смещение . При .
При выполнении операций над числами с плавающей точкой выполняют операции над смещенными порядками.
6.6.1. Вычисление порядка и смещенного порядка
Исходные данные могут вводиться в ЦВМ в естественной или нормальной форме в разных системах счисления и затем преобразовываться в двоичную систему счисления с записью в формат с плавающей точкой со смещенным порядком. До записи в формат порядок E представлен, как правило, в прямом или в дополнительном двоичном коде числом со знаком. Для записи в формат необходимо вычислить смещенный порядок . При выводе числа из ЦВМ, а иногда с иной целью, необходимо вычислять порядок E по значению смещенного порядка . При обоих вариантах преобразования следует поддерживать отношение (6-16), но с некоторыми оговорками.
В базовых форматах стандарта IEEE 754 (раздел 5.3) отношение (6-16) справедливо, если число нормализованное и порядок не выходит за пределы интервала допустимых значений. Если число ненормализованное с минимальным порядком, смещенный порядок
(6-17)
В табл.6.2 приведен прямой, обратный, дополнительный и смещенные коды порядка E при длине поля порядка 8 бит.
Сопоставляя смещенный код с прямым, обратным или дополнительным кодом, можно выявить закономерности, позволяющие сформулировать варианты правил их взаимного преобразования и выбрать то из них, которое наиболее удобно для применения в заданных условиях.
Например, из табл.6.2 следует, что дополнительный код E отличается от смещенного при лишь содержимым разряда знака. Из этого следует, что при их взаимном преобразовании достаточно инвертировать код в старшем разряде.
При преобразовании прямого или обратного кода в смещенный при достаточно выполнять их преобразования в дополнительный код (раздел 3.2.1) и инвертировать разряд знака результата. При обратном преобразовании инвертировать старший разряд и полученный дополнительный код преобразовать в прямой или дополнительный.
Таблица 6.2
-
Порядок
E
Прямой
код
Обратный
код
Смещенный
bias=127
Дополн.
код
Смещенный
bias=128
+127
+126
+125
…
+3
+2
+1
+0
–0
–1
–2
–3
…
–125
–126
–127
01111111
01111110
01111101
00000011
00000010
00000001
00000000
10000000
10000001
10000010
10000011
11111101
11111110
11111111
01111111
01111110
01111101
00000011
00000010
00000001
00000000
11111111
11111110
11111101
11111100
10000010
10000001
10000000
11111110
11111101
11111100
10000010
10000001
10000000
01111111
01111111
01111110
01111101
01111100
00000010
00000001
00000000
01111111
01111110
01111101
00000011
00000010
00000001
00000000
00000000
11111111
11111110
11111101
10000011
10000010
10000001
11111111
11111110
11111101
10000011
10000010
10000001
10000000
10000000
01111111
01111110
01111101
00000011
00000010
00000001
Для преобразования смещенного кода при в дополнительный код достаточно к смещенному коду прибавить константу , отбрасывая перенос из старшего разряда. При обратном преобразовании достаточно из дополнительного кода вычесть константу , отбрасывая заем из старшего разряда, или прибавить к дополнительному коду константу , отбрасывая перенос из старшего разряда.
Для преобразования смещенного кода при в прямой код достаточно, если в старшем разряде смещенного кода 0, инвертировать все его разряды, иначе прибавить константу , отбрасывая перенос из старшего разряда. При обратном преобразовании, если код знака 1, инвертировать все разряды, включая знак, иначе прибавить константу , отбрасывая перенос из старшего разряда.
Безусловно, существует множество иных вариантов преобразования.
При преобразовании порядка E в смещенный порядок в формате стандарта IEEE 754 необходимо учитывать, что прямой код минимально допустимого порядка , и если мантисса нормализована, он преобразуется в смещенный порядок . Если мантисса ненормализованная, то смещенный порядок, соответствующий , следует принять равным 00…0. При обратном преобразовании смещенному порядку ненормализованного числа соответствует минимальный порядок E= 1|11…10. Кроме того, необходимо учитывать особенности представления числа равного нулю.