Сложение, вычитание недесятичных чисел.

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

14. Естественная форма

В форме с фиксированной запятой в разрядной сетке выделяется строго определенное число разрядов для целой и для дробной частей числа. Левый (старший) разряд хранит признак знака (0 – "+", 1 – "-") и для записи числа не используется.

Сложение, вычитание недесятичных чисел. - student2.ru

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

A = [A] · KА,

где А – произвольное число, [A] – машинное изображение числа в разрядной сетке, KА - масштабный коэффициент.

Естественная форма числа в неявном, условном виде реализуется формулой:

Сложение, вычитание недесятичных чисел. - student2.ru

т.е. число записывается только с помощью набора значащих цифр 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о есть нормальная форма реализуется формулой: Сложение, вычитание недесятичных чисел. - student2.ru

Нормальная форма представления имеет огромный диапазон чисел и является основной в современных ЭВМ.

Сложение, вычитание недесятичных чисел. - student2.ru

При представлении чисел с плавающей запятой часть разрядов ячейки отводится для записи порядка числа, остальные разряды - для записи мантиссы. По одному разряду в каждой группе отводится для изображения знака порядка и знака мантиссы. Для того, чтобы не хранить знак порядка, используется так называемый смещённый порядок, который рассчитывается по формуле 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

Наши рекомендации