Сложение, вычитание недесятичных чисел.
Для того чтобы выполнять арифметические действия над числами, эти числа должны быть записаны в одной и той же системе счисления. Остальное рассмотреть на примерах. ☻
14. Естественная форма
В форме с фиксированной запятой в разрядной сетке выделяется строго определенное число разрядов для целой и для дробной частей числа. Левый (старший) разряд хранит признак знака (0 – "+", 1 – "-") и для записи числа не используется.
Сама запятая никак не изображается, но ее место строго фиксировано и учитывается при выполнении всех операций с числами. Независимо от положения запятой в машину можно вводить любые числа, т.к.
A = [A] · KА,
где А – произвольное число, [A] – машинное изображение числа в разрядной сетке, KА - масштабный коэффициент.
Естественная форма числа в неявном, условном виде реализуется формулой:
т.е. число записывается только с помощью набора значащих цифр xj без явного указания их весов и знаков сложения между ними. Отсчет ведется от точки, которая обычно фиксируется между целой и дробной частями числа.
С фиксированной запятой числа изображаются в виде последовательности цифр с постоянным для всех чисел положением запятой, отделяющей целую часть от дробной(например, 32,54; 0,0036; –108,2). Форма представления чисел с фиксированной запятой упрощает аппаратную реализацию ЭВМ, уменьшает время выполнения машинных операций, однако при решении задач на машине необходимо постоянно следить за тем, чтобы все исходные данные, промежуточные и окончательные результаты находились в допустимом диапазоне представления. Если этого не соблюдать, то возможно переполнение разрядной сетки, и результат вычислений будет неверным. От этих недостатков в значительной степени свободны ЭВМ, использующие форму представления чисел с плавающей точкой, или нормальную форму. В современных компьютерах форма представления чисел с фиксированной запятой используется только для целых чисел.
Нормальная форма
С плавающей запятой (ПЛЗ) числа изображаются в виде:
X = ± M×P ±r,
где M - мантисса числа (правильная дробь в пределах 0,1 ≤ M < 1), r - порядок числа (целое), P - основание системы счисления. Например, приведенные выше числа с фиксированной запятой можно преобразовать в числа с плавающей запятой так: 0,3254×102, 0,36×10-2, –0,1082×103.
Нормализованная экспоненциальная запись числа - это запись вида a= m*Pq, где q - целое число (положительное, отрицательное или ноль), а m - P-ичная дробь, у которой целая часть состоит из одной цифры. При этом m - мантиссa числа, q - порядк числа.
Tо есть нормальная форма реализуется формулой:
Нормальная форма представления имеет огромный диапазон чисел и является основной в современных ЭВМ.
При представлении чисел с плавающей запятой часть разрядов ячейки отводится для записи порядка числа, остальные разряды - для записи мантиссы. По одному разряду в каждой группе отводится для изображения знака порядка и знака мантиссы. Для того, чтобы не хранить знак порядка, используется так называемый смещённый порядок, который рассчитывается по формуле 2(a-1) + ИП, где a - количество разрядов, отводимых под порядок, ИП - истинный порядок.
В конкретной ЭВМ диапазон представления чисел с плавающей запятой зависит от основания системы и числа разрядов для представления порядка. При этом у одинаковых по длине форматов чисел с плавающей запятой с увеличением основания системы счисления существенно расширяется диапазон представляемых чисел. Точность вычислений при использовании формата с плавающей запятой определяется числом разрядов мантиссы. Она увеличивается с увеличением числа разрядов.
Алгоритм представления числа с плавающей запятой:
- перевести число из p-ичной системы счисления в двоичную;
- представить двоичное число в нормализованной экспоненциальной форме;
- рассчитать смещённый порядок числа;
- разместить знак, порядок и мантиссу в соответствующие разряды сетки.
При представлении информации в виде десятичных многоразрядных чисел каждая десятичная цифра заменяется двоично-десятичным кодом. Для ускорения обмена информацией, экономии памяти и удобства операций над десятичными числами предусматриваются специальные форматы их представления: зонный (распакованный) и упакованный. Зонный формат используется в операциях ввода-операций. Для этого в ЭВМ имеются специальные команды упаковки и распаковки десятичных чисел.
Пример записи числа в нормальной форме:
A = 7D08,816
B = -7D08,816
mA = 0,7D088 PxA = 40+4 = 44
mB = -0,7D088 PxB = 40+4 = 44
A = 0 100 0100 0111 1101 0000 1000 1000 0000 A = 44D0880 > 0
B = 1 100 0100 0111 1101 0000 1000 1000 0000 B = C4D0880 < 0
15. Действия над числами, представленных в естественной форме
(для компьютера - это целые числа)
При сложении кодов целых чисел нужно учитывать следующие положения.
Числа хранятся в дополнительном коде.
В сумматоре числа складываются вместе со знаками, при этом образуется знак результата.
При сложении чисел с разными знаками единица переноса из знакового (старшего) разряда стирается.
Пример. Дано А=254, В=175. Найти сумму чисел при разных знаках слагаемых в 16-разрядном формате.
А = 25410 = FE16 = 111111102
В = 17510 = AF16 = 101011112
Машинные коды этих чисел с разными знаками представим в таблицах.
254 -254
ПК 0 000000011111110 1 000000011111110
ОК 0 000000011111110 1 111111100000001
ДК 0 000000011111110 1 111111100000010
175 -175
ПК 0 000000010101111 1 000000010101111
ОК 0 000000010101111 1 111111101010000
ДК 0 000000010101111 1 111111101010001
Выполним действия (во всех случаях выполняется сложение в дополнительном коде!).
С1 = А + В
А 0000000011111110
В 0000000010101111
С1 0000000110101101
Проверка: С1 = 1101011012 = 28+27+25+23+22+20 = 256+128+32+8+4+1 = 42910
С2 = А - В = А + (-В)
А 0000000011111110
-В 1111111101010001
С2 10000000001001111
Перенос из знакового разряда исключаем.
Проверка: С2 = 10011112 = 26+23+22+21+20 = 64+8+4+2+1 = 7910
С3 = В - А = В + (-А)
В 0000000010101111
-А 1111111100000010
С3 1111111110110001
Число С3 отрицательное в дополнительном коде.
Проверка: получим прямой код числа С3.
ДК 1111111110110001
ОК 1111111110110000
ПК 1000000001001111
С3 = -10011112 = -(26+23+22+21+20 )= -(64+8+4+2+1) = -7910
С4 = -А - В = (-А) + (-В)
-А 1111111100000010
-В 1111111101010001
С4 11111111001010011
Перенос из знакового разряда исключаем.
Число С4 отрицательное в дополнительном коде.
Проверка: получим прямой код числа С4.
ДК 1111111001010011
ОК 1111111001010010
ПК 1000000110101101
С4 = -1101011012 =-( 28+27+25+23+22+20 )=-( 256+128+32+8+4+1) =- 42910
16. Действия над числами, представленными в нормальной форме.
При сложении чисел, представленных в нормальной форме, необходимо учитывать:
Числа в нормальной форме хранятся в памяти в прямом коде с нормализованными мантиссами.
Сложение кодов чисел производится путем сложения мантисс только при одинаковых порядках (характеристиках) слагаемых. За общий выбирается наибольший порядок. Выравнивание порядков слагаемых осуществляется изменением мантиссы меньшего числа.
Результаты в прямом коде нормализуются.
Пример. Дано А = 15 7/8 ; B = 5/16. Найти сумму чисел при разных знаках слагаемых.
Вычисления с числами в нормальной форме удобнее выполнять в шестнадцатеричной системе счисления, разряды чисел 4 байта (32 двоичных разряда).
A = F,E16; B = 0,516
1. Нормализация мантисс и определение характеристик:
mA = 0,FE PxA = 40 + 1 = 41
mB = 0,5 PxB = 40 + 0 = 40
2. Выравнивание характеристик:
PxB = 41 => mB = 0,05
3. Дополнительные коды мантисс отрицательных чисел.
-mA = 1.00 - 0,FE = 0,02
-mB = 1.00 - 0,05 = 0,FB
4. Коды чисел:
а) в шестнадцатеричном представлении
A = 41FE0000
B = 41050000
-A = C1020000
-B = C1FB0000
б) в двоичном представлении
A = 0 1000001 1111 1110 0000 0000 0000 0000
B = 0 1000001 0000 0101 0000 0000 0000 0000
-A = 1 1000001 1111 1110 0000 0000 0000 0000
-B = 1 1000001 0000 0101 0000 0000 0000 0000
Примечание: для записи отрицательных кодов чисел удобнее сначала записать код в двоичном представлении, затем преобразовать его в шестнадцатеричное.
Важно: помните, что числа в нормальной форме представления хранятся в прямом коде!
5. Выполнение действий.
C1 = A + B
mA FЕ0000
mB 050000
mC1 1030000
Так как слагаемые с одинаковым знаком, то перенос единицы из старшего разряды мантиссы означает нарушение нормализации мантиссы влево.
Нормализация мантиссы: mC1 = 0,103 PC1 = 41 + 1 = 42
Код числа C1 = 42103000 или 0 1000010 0001 0000 0011 0000 0000 0000
Проверка: С1 = 10,316 = 16 3/1610
C2 = -A - B = - (A + B)
Так как числа хранятся в прямом коде, нет необходимости выполнять двойные преобразования, можно взять C2 = -C1.
Код числа С2 = 1 1000010 0001 0000 0011 0000 0000 0000 или C2103000
С2 = -10,316 = -16 3/16 10
C3 = A – B
mA FЕ0000
-mB FB0000
mC3 1F90000
Так как слагаемые с разными знаками, то единица переноса из старшего разряда является признаком положительного результата и стирается.
Код числа С3 = 41F90000 или 0 1000001 1111 1001 0000 0000 0000 0000
С3 = F,916 = 15 9/1610
C4 = B – A
-mA 0200000
mB 0500000
-mC4 0700000
Так как слагаемые с разными знаками и отсутствует перенос из старшего разряда мантиссы, то результат отрицательный в дополнительном коде и должен быть преобразован в прямой код.
mC4 = 1,00 - 0,07 = 0,F9 PmC4 = 41
Код числа С4 = C1F90000 или 1 1000001 1111 1001 0000 0000 0000 0000
C4 = -F,916 = -15 9/1610