Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика учебное пособие часть 1.doc
Скачиваний:
31
Добавлен:
16.09.2019
Размер:
882.18 Кб
Скачать

6. Обработка чисел в компьютере

6.1 Выполнение операций сложения

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

При этом знаковый разряд участвует в операциях по правилам двоичного сложения. Покажем это на примерах.

Пример 1. Найти сумму (X + Y), если:

1) X = 126(10) 0 126

Y =  26(10) 1 974

0 100

знак результата + (код 0), результат +100(10) .

2) X =  512(10) 1 488

Y =  390(10) 1 610

1 098

Знак результата () (код 1), результат в дополнительном коде. Перевод отрицательного числа из дополнительного кода в прямой дает результат  902(10).

3) X =  850(10) 1 150

Y = + 429(10) 0 429

1 579

знак (), результат в ДК, обратный перевод в прямой код  421(10).

4) X =  2101(3) 1. 0122

Y = + 1011(3) 0. 1011

1. 1210

результат (), результат  1020(3).

5) X = + 500(10) 0 500

Y = + 739(10) 0 739

1 239

!!! Признак переполнения – отрицательный знак результата при сложении двух положительных чисел и наоборот – положительный знак результата при сложении двух отрицательных чисел.

6) X =  500(10) 1 500

Y =  739 (10) 1 261

0 761

Пример 2. Представить числа в ДК с учетом разрядной сетки 1 байт и выполнить операцию сложения.

X =  3(10) 11111101

Y = + 3(10) 00000011

00000000  +0

6.2 Сложение нормализованных чисел

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

Даны два нормализованных числа – A = mAрkA, B = mBрkB.

Алгоритм сложения чисел в форме с ПЗ.

1. Проверить равенство порядков слагаемых kA, kB. Если порядки не равны, то увеличить меньший порядок до большего.

2. Если меньший порядок был увеличен на m единиц, то необходимо мантиссу этого числа сдвинуть на m разрядов вправо с потерей младших разрядов.

3. Провести сложение мантисс.

4. Проверить условие нормализации мантиссы результата, и провести ее, если условие не соблюдается.

Пример 3. Пусть под мантиссу отводится n=5 разрядов.

а) А(10) = 0.13840  103

В(10) = 0.16430  101

Порядок числа В необходимо увеличить на 2, при этом мантиссу В сдвигаем вправо на 2 разряда (теряя младшие разряды).

В1 = 0.00164 А+В1

0.13840

0.00164

0.14004 - мантисса удовлетворяет условиям нормализации.

Ответ: А + В = 0.14004  103

б) А(2) = 0.11011  23

В(2) = 0.11111  25

Порядок числа А необходимо увеличить на 2, при этом мантиссу А сдвигаем вправо на 2 разряда (теряя младшие разряды).

mА’ = 0.00110.

Выполняем сложение мантисс

0.00110

0.11111

1.00101 – мантисса результата не удовлетворяет условиям нормализации (больше 1).

Проведем нормализацию результата и увеличение порядка.

Ответ: А + В = 0.10010  26

!Из-за ошибок усечения (отбрасывания) младших разрядов при сложении вещественных чисел не выполняется ассоциативность сложения, то есть (а + b) + c a + (b + c)

Пример 4. Найти сумму чисел, если для представления мантиссы отведено 4 разряда: 2 ½ + 1/8 + 1/8 .

2 ½ = 0.1010  22 0,1010  22

1/8 = 0.1000  2-2 0,0000  22 (после выравнивания порядков)

Проведем сложение в порядке, указанном в задании.

2 ½ + 1/8 0,1010  22

0,0000 22

0.1010  22 - результат равен первому слагаемому

Добавляем к результату еще 1/8 :

0.1010  22

0.0000 22

0.1010  22

Ответ: 0.1010  22 .

Поменяем порядок сложения:

1/8 + 1/8 0,1000  2-2

0,1000 2-2

1,0000  2-2  0,1000  2-1

Добавляем к результату 2 ½.

0,1010  22 0.1010

0,1000  2-1 0.0001

0.1011  22

Ответ: 0.1011  22 – правильный результат.

Следовательно, при сложении вещественных чисел важен порядок их сложения. Проблема состоит в том, что при сложении большого и малого числа малое число может отсекаться.

Поэтому общее правило сложения звучит так:

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

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