СОДЕРЖАНИЕ
Введение
Выполнение операций алгебраического сложения и сдвига в ЭВМ
1.Формальные правила двоичной арифметики
1.1 Операция алгебраического сложения в ЭВМ
1.1.1 Прямой код
1.1.2 Сложение в прямом коде
1.1.3 Дополнительный код
1.1.4 Алгебраическое сложение в дополнительном коде
1.1.5 Обратный код
1.1.6 Сложение в обратном коде
2.Операция сдвига в ЭВМ
2.1 Алгоритм сложения чисел в машинах с плавающей запятой
2.2 Денормализация чисел. Виды денормализации и методы Устранения
3.Округление чисел в ЭВМ
3.1 Округление чисел в прямом коде
3.2 Особенности округления чисел, заданных инверсными кодами
Литература
Введение
Тема реферата «Выполнение операций алгебраического сложения и сдвига в ЭВМ».
В процессе написания реферата нам предстоит ознакомиться с :
- формальными правилами двоичной арифметики;
- операциями алгебраического сложения в ЭВМ;
- операциями сдвига в ЭВМ;
- округлением чисел в ЭВМ.
Выполнение операций алгебраического сложения и сдвига в ЭВМ
1.Формальные правила двоичной арифметики
Популярность двоичной системы счисления во многом объясняется простотой правил двоичной арифметики.
Сложение | Вычитание | Умножение |
0+0=0 | 0-0=0 | 0х0=0 |
0+1=1 | 0-1=1 (заем) 1 | 0х1=0 |
1+0=1 | 1-0=1 | 1х0=0 |
1+1=0 1 (перенос в ст. разр) |
1-1=0 | 1х1=1 |
Основной операцией в ЭВМ является сложение. По способу ее выполнения арифметические устройства могут быть параллельного, последовательного, параллельно-последовательного действия. Последовательное суммирование должно выполняться на основании следующего равенства:
ai+bi+Пі-1= Si+Пі
1.1 Операция алгебраического сложения в ЭВМ
При вычислении суммы двух чисел возможны два варианта: слагаемые имеют одинаковые знаки и слагаемые имеют различные знаки. В результате этого алгоритмы получения суммы для каждого из них различны.
Для операндов с одинаковыми знаками:
1. Сложить два числа.
2. Сумме присвоить знак одного из слагаемых.
Алгоритм получения алгебраической суммы:
1. Сравнить знаки слагаемых, и если они одинаковы, то выполнить сложение по первому алгоритму.
2. Если знаки слагаемых разные, то сравнить слагаемые по абсолютной величине.
3. Вычесть из большего меньшее.
4. Результату присвоить знак большего слагаемого.
Из этого следует, что первый алгоритм проще второго. Следовательно, желательно преобразовать отрицательные числа таким образом, чтобы операцию вычитания заменить операцией сложения, т.е. S=A+(-B).
Для того, чтобы решить эту проблему, необходимо вводить специальные коды: прямой, обратный, дополнительный.
Способ построения этих кодов определяется функциями кодирования, которые должны обеспечить:
1. Запись алгебраического знака числа.
2. Представление отрицательных чисел при помощи вспомогательных, положительных, которые отличаются по изображению от положительных исходных чисел, т.е. области изображений положительных и отрицательных чисел не должны пересекаться.
3. Полную идентичность алгоритмов выполнения операций над числами различных знаков, и следовательно, полную идентичность необходимого при этом оборудования.
1.1.1 Прямой код
Прямым кодом отрицательного числа называется его изображение в естественной форме записи, у которого в знаковом разряде ставится 1. Прямой код положительного двоичного числа совпадает с его обычным изображением в естественной форме, так как знак кодируется нулем.
Согласно определению, функция кодирования чисел в прямом коде правильных дробей вида: А=азн a-1 a-2... а-n запишется следующим образом:
Величина А будет определяться в прямом коде следующим выражением:
при этом знаковому разряду не приписывается никакого веса. Очевидно, что диапазон изменения машинных изображений для прямого кода двоичной дроби лежит в пределах:
.
В геометрической интерпретации область положительных чисел будет совпадать с областью их изображений, а для отрицательных чисел эти области будут отличаться.
В прямом коде нуль имеет два значения: положительное 0,000..0 и отрицательное 1,000...0. Обычно в ЭВМ используется положительный нуль, но в процессе вычислений может возникнуть и его отрицательное изображение. Оба изображения полностью эквивалентны и применение любого из них не приводит к ошибке.
Пример записи числа в прямом коде:
А=+0,101011 Апр= 0,101011;
В=-0,110011 Впр=1,110011.
1.1.2 Сложение в прямом коде
Правила сложения чисел в прямом коде не отличаются от обычных правил сложения, т.е. если оба слагаемых имеют одинаковые знаки, то их числовые разряды складываются, а сумме присваивается знак одного из них. Если слагаемые имеют разные знаки, то из числовых разрядов большего по абсолютной величине числа вычитается меньшее, а сумме приписывается знак большего из слагаемых. При этом числовые разряды кода обрабатываются отдельно от знаковых, так как последние не имеют веса.
Рассмотрим возможные 4 случая получения суммы чисел в прямом коде.
1) А›0, В›0, С›0.
А=+0,101001 В=+0,000101
Апр=0,101001 Впр=0,000101 Спр=А+В
+0,101001
0,000101
0,101110
2) А›0, В‹0, С›0.
А=+0,101001 В=-0,000101
Апр=0,101001 Впр=1,000101 Спр=А-|В|
-0,101001
1,000101
0,100100
3) А‹0, В›0, С‹0.
А=-0,101001 В=+0,000101
Апр=1,101001 Впр=0,000101 Спр=1+(|А|-|В|)
-0,101001
0,000101
0,100100 Спр=1+0,100100=1,100100
4) А‹0, В‹0, С‹0.
А=-0,101001 В=-0,000101
Апр=1,101001 Впр=1,000101 Спр=1+|А|+|В|
+0,101001
0,000101
0,101110 Спр=1+ 0,101110=1,101110
Таким образом, в прямом коде знаковый разряд и цифровую часть нельзя рассматривать как единое целое. Кроме того, необходимо кроме сумматора иметь и вычитатель. В результате этого прямой код не применяется для выполнения операции алгебраического сложения, но применяется для выполнения операций умножения и деления.
1.1.3 Дополнительный код
В дополнительном коде операция вычитания заменяется операцией алгебраического сложения. При этом знаковый разряд и цифровая часть рассматриваются как единое целое.
Рассмотрим особенности преобразования в дополнительный код. Отрицательное число заменяется некоторым вспомогательным положительным числом, причем :
При этом для дробных отрицательных чисел всегда имеет место: |А|+|[A]Д |=1
Геометрическая интерпретация дополнительного кода правильной дроби при р=2 представлена на рис. 1.1.
-1 А<0 A>0 +1 +2
A>0 A<0 Область изображений
Рисунок 1.1- Геометрическая интерпретация дополнительного кода
С ростом абсолютной величины дополнительный код положительного числа возрастает, а отрицательного - убывает.
Ввиду того, что область чисел и область изображений равны по длине модуля р=2, между числами и их изображениями имеет место однозначное соответствие. При этом область положительных чисел совпадает с областью изображений. Поэтому изображения положительных двоичных дробей не отличаются от их обычной двоичной записи, а для изображения правильной отрицательной дроби к ней нужно прибавить модуль 2, по которому сравнивается число с его изображением, т.е. получить дополнение до двух.
Дополнительный код положительного числа совпадает с его представлением в прямом коде.
Правило преобразования отрицательного числа из прямого кода в дополнительный:
Для преобразования прямого кода отрицательного числа в дополнительный необходимо все значащие разряды заменить на противоположные (проинвертировать) и прибавить 1 к младшему разряду. Знаковый разряд остается без изменения.
[A]пр=0,10110100; [A]дк=0,10110100;
[В]пр=1,10111101; [В]дк=1,01000011.
1.1.4 Алгебраическое сложение в дополнительном коде
В дополнительном коде операция вычитания заменяется операцией алгебраического сложения. При этом знаковый разряд и цифровая часть числа рассматриваются как единое целое, в результате чего с отрицательными числами машина оперирует как с неправильными дробями. Правильный знак суммы получается автоматически в процессе сложения содержимого знаковых разрядов операндов и единицы переноса из цифровой части, если она есть.
Рассмотрим все возможные варианты сложения чисел в дополнительном коде:
1) А›0, В›0, С›0.
А=+0,101101 В=+0,000111
Апр=0,101101 Впр=0,000111
Адк=0,101101 ВДК=0,000111 Сдк=Адк+Вдк
+0,101101
0,000111
0,110100
2) А›0, В‹0, С›0.
А=+0,101101 В=-0,000111
Апр=0,101101 Впр=1,000111
Адк=0,101101 ВДК=1,111001 Сдк=Адк+Вдк
+ 0,101101
1,111001
1¬0,100110 (1 переноса из знакового разряда суммы не учитывается)
3) А‹0, В›0, С‹0.
А=-0,101101 В=+0,000111
Апр=1,101101 Впр=0,000111
Адк=1,010011 ВДК=0,000111 Сдк=Адк+Вдк
+ 1,010011
0,000111
1,011010 (Спр= 1,100110)
4) А‹0, В‹0, С‹0.
А=-0,101101 В=-0,000111
Апр=1,101101 Впр=1,000111
Адк=1,010011 ВДК=1,111001 Сдк=Адк+Вдк
+ 1,010011
1,111001
1¬1,001100 (Спр= 1,110100)
При сложении в дополнительном коде возможно переполнение разрядной сетки (в первом и четвертом случаях). Признаком переполнения является отличие знака полученной суммы от знаков слагаемых.
1.1.5 Обратный код
Числа в обратном коде представляются в следующем виде для двоичных чисел:
Обратный код положительного числа совпадает с его представлением в прямом коде. Обратный код отрицательного числа получают инвертированием всех разрядов числа, кроме знакового.
[A]пр=0,10110100; [A]ок=0,10110100;
[В]пр=1,10111101; [В]ок=1,01000010.
1.1.6 Сложение в обратном коде
В обратном коде, как и в дополнительном, операция вычитания заменяется операцией сложения. При этом знаковый разряд и цифровая часть числа рассматриваются как единое целое. Правильный знак суммы получается в результате суммирования цифр знаковых разрядов операндов и единицы переноса из цифровой части, если она есть. Характерной особенность сложения в обратном коде является наличие циклического переноса (если он возникает) из знакового разряда в младший разряд цифровой части, благодаря которому осуществляется коррекция суммы на 2-n.
Рассмотрим все возможные варианты сложения чисел в обратном коде:
1) А›0, В›0, С›0.
А=+0,101101 В=+0,000111
Апр=0,101101 Впр=0,000111
Аок=0,101101 Вок=0,000111 Сок=Аок+Вок
+0,101101
0,000111
0,110100
2) А›0, В‹0, С›0.
А=+0,101101 В=-0,000111
Апр=0,101101 Впр=1,000111
Аок=0,101101 Вок=1,111000 Сок=Аок+Вок
+ 0,101101
1,111000
1Я0,100101 (1 переноса из знакового разряда суммы прибавляется в
а 1 младший значащий разряд результата)
0,100110
3) А‹0, В›0, С‹0.
А=-0,101101 В=+0,000111
Апр=1,101101 Впр=0,000111
Аок=1,010010 Вок=0,000111 Сок=Аок+Вок
+ 1,010010
0,000111
1,011001 (Спр= 1,100110)
4) А‹0, В‹0, С‹0.
А=-0,101101 В=-0,000111
Апр=1,101101 Впр=1,000111
Аок=1,010010 Вок=1,111000 Сок=Аок+Вок
+ 1,010010
1,111000
1Я1,001010 (1 переноса из знакового разряда суммы прибавляется в
а 1 младший значащий разряд результата)
1,001011 (Спр= 1,110100)
При сложении в обратном коде, как и в дополнительном, в 1-м и 4-м случаях возможно переполнение.
Для упрощения обнаружения переполнения разрядной сетки ЭВМ используются модифицированный обратный и модифицированный дополнительный коды.
При представления положительных чисел в модифицированном коде в знаковых разрядах используется 00, а отрицательных - 11. Признаком переполнения разрядной сетки являются разные значения в знаковых разрядах.
Пример 1.
[А]мок=00,101101 [В]мок=00,011100
00,101101
00,011100
01,001001 - положительное переполнение
Пример 2.
[А]мок=11,010010 [В]мок=11,100011
11,010010
11,100011
1←10,110101
а + 1
10,110110 - отрицательное переполнение.
2.Операция сдвига в ЭВМ
К операции сдвига приходиться обращаться при выполнении сложения в машине с плавающей запятой, а также при выполнении операций умножения и деления в ЭВМ обоих типов. Во всех этих операциях производится сдвиг мантисс, поэтому будут рассматриваться только числа с фиксированной запятой.
Сдвиг прямого кода числа на k разрядов вправо эквивалентен умножению этого числа на 2-k. Ввиду того, что при сдвиге вправо младшие разряды сдвигаемого числа выходят за пределы разрядной сетки машины и теряются, погрешность представления сдвинутого кода числа имеет отрицательный знак для кодов положительных чисел и положительный знак для кодов отрицательных чисел. Для ее уменьшения необходимо предпринимать округление чисел. При сдвиге прямого кода отрицательной дроби сдвигается только ее мантисса, а знак остается без изменения.
Пример 1.
А= 1,011010, k=1 (левый сдвиг) k=-1 (правый сдвиг)
21хА=1,110100 2-1хА=1,001101
Сдвиг прямого кода числа влево на k разрядов эквивалентен умножению числа на 2k. Эта операция корректна до тех пор, пока старшие значащие цифры не начнут выходить за пределы разрядной сетки, т.е. пока число по абсолютной величине не станет больше 1. При сдвиге влево освобождающиеся справа разряды заполняются 0.
Сдвиг положительного числа влево или вправо в дополнительном или обратном кодах ничем не отличаются от сдвига положительного числа в прямом коде.
Под сдвигом отрицательного числа А, записанного инверсным (дополнительным или обратным) кодом, понимается преобразование инверсного кода отрицательного числа А в инверсный код отрицательного числа Ах2-k в случае сдвига вправо и Ах2k в случае сдвига влево.
Общим правилом сдвига дробей вправо в инверсном коде является наличие передачи из знакового разряда в старший цифровой разряд и восстановление знака, т.е. освобождающиеся справа разряды заполняются 1.
При сдвиге влево освобождающиеся справа разряды в обратном коде заполняются 1, а в дополнительном - 0. Количество сдвигов правильной дроби влево ограничено условием | Ах2k |<1, т.е. сдвиг допустим лишь до тех пор, пока в разряде справа от запятой не появится 0 (пока сохраняется знак результата). Перемена знака результата при сдвиге влево является признаком переполнения, который для отрицательных и положительных чисел совпадает с признаком переполнения, возникающим при сложении кодов двух чисел.
Пример 2.
Сдвиг в обратном коде:
[А]о= 1,011010, k=1 (левый сдвиг) k=-1 (правый сдвиг)
21хА=1,110101 2-1хА=1,101101
Сдвиг в дополнительном коде:
[А]д= 1,011010, k=1 (левый сдвиг) k=-1 (правый сдвиг)
21хА=1,110100 2-1хА=1,101101
2.1 Алгоритм сложения чисел в машинах с плавающей запятой
Результат сложения двух чисел А=pmaa; B=pmbb, представленных в форме с плавающей запятой, должен быть тоже числом вида С=pmсc (здесь a, b, c – мантиссs, ma, mb, mc – порядокb). При этом должно выполняться равенство:
pmaa+ pmbb= pmсc
При сложении чисел, представленных в нормальной форме, можно выделить 4 этапа:
1. Уравниваются порядки слагаемых: меньший порядок увеличивается до большего, а мантисса преобразуемого числа сдвигается вправо на соответствующее количество разрядов.
Для этой цели производится вычитание порядков чисел. Знак и модуль разности будут определять соответственно, какое из слагаемых нужно преобразовывать и на сколько разрядов сдвигать мантиссу.
2. Производится преобразование мантисс в один из модифицированных инверсных кодов: дополнительный или обратный.
3. Выполняется сложение мантисс по правилам сложения чисел с фиксированной запятой.
4. Производится нормализация результата и преобразование в прямой код, приписывается общий порядок слагаемых и выполняется округление мантиссы результата.
Пример 1. Прямой код.
А: mа=0,011; a=1,101010; В: mв=0,101; b=0,110010;
т.к. mа - mв= 2? то необходимо mа увеличить до mв и откорректировать мантиссу числа А сдвигом на 2 разряда вправо.
А’: m’а=0,101; a=1,001010;
[a’]Д=11,110110; [b]Д=00,110010;
+11,110110; 00,110010
00,101000 mс=0,101; с=0,101000. Результат нормализован.
2.2 Денормализация чисел. Виды денормализации и методы устранения
В зависимости от абсолютных величин мантисс слагаемых результат может получиться нормализованным, или денормализованным (влево – переполнение, или вправо). Положительные нормализованные числа имеют 1 в старшем разряде мантиссы, а отрицательные числа, записанные в инверсном коде. имеют 0 в этом разряде. Несовпадение цифр в знаковых разрядах свидетельствует о денормализации влево (переполнение), а совпадение цифр знакового и старшего значащего разряда мантиссы - о нарушении нормализации вправо (правая денормализация).
Правила устранения денормализации.
При денормализации влево мантисса сдвигается на один разряд вправо, а порядок увеличивается на 1.
При денормализации вправо мантисса сдвигается влево до появления в старшем разряде 1, при знаке 0, или 0 при знаке 1, а из порядка вычитается количество 1, равное числу сдвигов мантиссы.
Порядок проверки денормализации.
Сначала выполняется проверка, не нарушена ли нормализация влево и, если нарушена, то устраняется. Если нормализация влево не нарушена, то проверяется наличие правой денормализации, и, если она есть, то устраняется. Левая денормализация возможна только на 1 разряд, а правая - на n (количество разрядов, на которое может быть нарушена нормализация вправо, ограничено только длиной разрядной сетки ЭВМ). После выполнения предельного числа сдвигов мантиссу результата представляют машинным нулем. Мантиссу результата представляют также машинным нулем, если в процессе ее сдвига порядок числа окажется меньше допустимого, т.е. абсолютная величина результата будет меньше, чем минимально возможное машинное число.
При сложении может произойти истинное переполнение разрядной сетки числа, т.е. переполнение разрядной сетки порядка. В этом случае минимум одно из слагаемых должно иметь максимальный порядок, а мантисса результата должна получиться денормализованной влево. При этом в ЭВМ формируется признак переполнения порядка.
Пример 1.
[А]пр =0 101 1,10101;
[B]пр =0 011 0,11001; Найти С=А+В
порядок мантисса
[B’]пр =0 101 0,0011001;
[a]д=11,0101100
[b]д=00,0011001
[c]д=11,1000101
Так как мантисса результата денормализована вправо на 1 разряд, то ее необходимо сдвинуть на 1 разряд влево и при этом вычесть из порядка 1.
[С]д=0 100 11,000101; [С]пр=0 100 11,111011;
Пример 2.
[А]пр =0 101 1,10101;
[B]пр =0 100 1,11001; Найти С=А+В
порядок мантисса
[B’]пр =0 101 1,011001;
[a]д=11,010110
[b]д=11,100111
[с]д=10,111101
Так как мантисса результата денормализована влево, то ее необходимо сдвинуть на 1 разряд вправо и при этом порядок увеличить на 1.
[С]д=0 110 11,0111101; [С]пр=0 110 11,1000011.
3.Округление чисел в ЭВМ
Выбор системы счисления и длина разрядной сетки ЭВМ, а также формы представления числа в машине зависят в значительной мере от требуемой точности вычислений. Точность вычислений определяется также погрешностью выполнения арифметических операций при использовании в ЭВМ чисел, представленных в форме с фиксированной и плавающей запятой. Можно считать, что в машине с фиксированной запятой операции сложения и вычитания, при условии отсутствия переполнения, выполняется точно.
Источниками погрешностей при сложении в машине с плавающей запятой являются сдвиг вправо мантиссы одного из исходных чисел при выравнивании порядков, сдвиг вправо мантиссы при нормализации результата, а также искусственная установка нуля в качестве результата при отрицательном переполнении порядков. Поэтому при нормальной форме представления чисел сама операция алгебраического сложения является источником погрешностей.
Таким образом, причинами погрешностей вычислений в ЭВМ могут быть:
1) неточное задание исходных данных, участвующих в выполнении операции (либо из-за ограничений разрядной сетки машины, либо из-за погрешностей перевода информации из одной системы счисления в другую);
2) использование приближенных методов вычислений, что само по себе дает методическую погрешность (например, использование метода прямоугольников, трапеций при интегрировании);
3) округление результатов элементарных операций, что в свою очередь может привести к появлению накопленных погрешностей.
3.1 Округление чисел в прямом коде
Если предположить, что исходная информация не содержит никаких ошибок и все вычислительные процессы выполняются абсолютно точно, то всегда существует третий тип ошибок — ошибки округления, которые возникают при переводе чисел из одной системы счисления в другую и последующем представлении их в разрядной сетке машины, а также при получении внутри машины чисел, разрядностью большей, чем это допустимо, например, при умножении. В этом случае число А округляют, т. е. заменяют его машинным числом [A] заданной разрядности. Округление (обозначим его знаком Ё) называется оптимальным, если для любого машинного числа [A] справедливо ЁА=[A]. Пусть [A]1и [A]2 - два последовательных машинных числа, тогда при оптимальном округлении вещественное число A такое, что [A]1‹A‹ [A]2 заменяется либо числом [A]1, либо числом [A]2. Если ЁА≤A, то говорят об округлении по недостатку, если ЁА ≥A, то говорят об округлении по избытку. Округление называют симметричным, когда ЁА= -Ё(-А). Различают три вида симметричного округления.
1. Округление в направлении к нулю, когда вещественное число округляется до ближайшего к нулю машинного числа.
2. Округление в направлении от нуля, когда округление производится до машинного числа, лежащего дальше от нуля, чем вещественное число А.
3. Округление по дополнению, когда округление производится до ближайшего машинного числа.
В качестве параметров, по которым будут сравниваться способы округления, целесообразно использовать максимальную величину модуля погрешности, т. е. max , где = А-[A], и математическое ожидание погрешности округления .
Округление к нулю или усечение.
Для конкретности считаем, что числа в машине представлены в прямом коде с запятой, фиксированной перед старшим разрядом, [A]= а-1...a-n (правильная дробь). Пусть в результате каких-либо действий над машинными числами внутри машины сформировалось число [А]', имеющее k = n + t разрядов. Очевидно, что самый простой способ округления состоит в отбрасывании хвоста числа [А]', который состоит из лишних разрядов, т.е. разрядов с номерами а-n-1, a-n-2, ... ,a-n-t.
Если считать, что появление чисел с абсолютной величиной А, но разных знаков равновероятно и равновероятны все значения хвоста чисел одного знака, то математическое ожидание погрешности в данном случае равно нулю, т.е. = 0.
Обычно вероятность появления чисел разного знака при выполнении определенной программы не одинакова, поэтому представляет интерес округление абсолютных величин, т. е. фактически чисел одного знака.
При действиях с числами одного знака погрешность усечения носит систематический характер, что приводит к накоплению погрешности. Это обстоятельство заставляет исследовать другие способы округления, которые рассматриваются пока для прямых кодов.
Округление от нуля.
Реализация данного способа требует анализа хвоста на нуль, затем отбрасывается хвост и, если отсекаемая часть не равна нулю, к абсолютной величине оставшейся части добавляется единица в младший разряд. Это добавление может вызвать распространение переносов через все разряды числа, что требует в общем случае выполнения операции сложения для реализации данного способа округления. Помимо дополнительных временных затрат это может привести к переполнению разрядной сетки. Следовательно, способ сложнее в реализации, хотя основные его характеристики точно такие же, как и при усечении.
Округление по недостатку.
Реализация данного способа базируется на анализе знака округляемого числа. Если [А]'> 0, то округление заключается в отбрасывании хвоста. Если же [А]' < 0, то хвост также отбрасывается, а к величине оставшейся части добавляется единица в младший разряд, если хвост не равен нулю. Таким образом, реализация данного способа еще более усложнена по сравнению со способом округления от нуля за счет анализа знака числа [А]', хотя величина max осталась при этом прежней.
Если рассматривать округление чисел только одного знака, то при А' > 0 данный способ совпадает с усечением, а при А' < 0 - с округлением от нуля. Отсюда ясно, что он не может конкурировать с усечением результатов.
Округление по избытку.
Этот способ во всем подобен предыдущему, с тем отличием, что добавление единицы в младший разряд сохраняемой части числа производится, когда оно больше нуля и хвост не равен нулю. При А'<0 хвост просто отбрасывается. Характеристики данного способа точно такие же, как у предыдущего, за исключением знака величины , который меняется на противоположный.
Округление по дополнению.
Данный способ представляет собой объединение способов округления от нуля и к нулю. Его реализация связана с коррекцией сохраняемой части числа А', которая производится по результатам анализа значения старшей цифры отсекаемой части a-n-1, т. е. цифры дополнительного (n + 1)-го разряда (ДР). Когда (n + 1 разряд) = 0, происходит округление к нулю, в противном случае - от нуля.
В случае равновероятного появления чисел разных знаков и равномерного распределения вероятностей появления различных значений хвоста числа математическое ожидание погрешности округления равно нулю. Однако при округлении чисел одного знака значение отлично от нуля. Поэтому при округлении чисел одного знака данный способ дает систематические ошибки округления, хотя и меньшие, чем при усечении.
По своим характеристикам способ округления по дополнению лучше, чем усечение. Систематические ошибки при округлении чисел одного знака обусловлены в данном случае тем, что округление особенно неточно производится, когда значение отсекаемой части близко к половине единицы младшего сохраняемого разряда. Этот недостаток устраняется в следующем способе округления.
Усовершенствованное округление по дополнению.
В этом случае решение о коррекции сохраняемой части числа А' принимается на основе анализа значения всех разрядов его отсекаемой части, а не только старшего. Таким образом, усовершенствованный способ дает хорошее округление в случае чисел одного знака, однако это достигается за счет усложнения его реализации.
Упрощенное округление по дополнению.
При реализации способов округления по дополнению из-за возникновения переносов при суммировании сохраняемой части числа с единицей округления необходимо выполнить операцию сложения, что требует дополнительного времени, т. е. снижает реальное быстродействие ЭВМ и, кроме того, может повлечь за собой переполнение разрядной сетки. Этот способ округления состоит в том, что младший разряд сохраняемой части числа принудительно устанавливается в единицу, если старший разряд отбрасываемой части равен единице.
При этом если в неокругленном результате разряд а-n равен единице, то он не изменяется при округлении. Если в неокругленном результате операции значение разряда а-n есть нуль, то установка его в единицу вносит погрешность.
Таким образом, при равновероятном появлении нуля и единицы в младшем разряде сохраняемой части для знакопеременных чисел снова получим симметричное распределение погрешностей.
Вероятностное округление.
Для такого округления необходимо иметь датчик случайных величин (0 или 1), единица с выхода которого прибавляется к младшему разряду сохраняемой части числа. Погрешность округления при равновероятном распределении значений отбрасываемой части является случайной величиной с нулевым математическим ожиданием.
Таким образом, самым простым способом округления является усечение, при котором не требуется дополнительных затрат времени и оборудования. Однако на практике важнее всего точность вычислений. Только для трех способов округления по дополнению максимальная ошибка близка к половине единицы младшего разряда машинного числа, т. е. является наименьшей. Наиболее быстродействующим из них является упрощенный способ, а наиболее точным — усовершенствованный. Поэтому предпочтение тому или другому способу округления следует отдавать только после анализа требований, предъявляемых к быстродействию и погрешности вычислений конкретной машины. Будем в дальнейшем пользоваться способом округления по дополнению.
3.2 Особенности округления чисел, заданных инверсными кодами
Так как положительные числа в прямом, обратном и дополнительном кодах представляются одинаково, то и правила округления положительных чисел во всех трех кодах будут теми же. Однако округление отрицательных чисел, записанных в инверсных кодах, имеет ряд особенностей.
Обратный код.
При округлении по дополнению всегда округляется абсолютная величина, вследствие этого из дополнительного разряда (ДР) отрицательной дроби необходимо вычесть единицу, т. е. прибавить к округляемой дроби обратный код -1окр = 1,11...10, где цифра 0 записана в ДР. Цепочка циклического переноса должна при этом охватывать и этот ДР.
Добавлять код 1,11...10 и перестраивать цепочку циклического переноса для охвата ДР, т. е. (n+ 1)-го разряда сумматора, весьма неудобно. Поэтому отрицательные дроби обычно округляются после их перевода из обратного в прямой код.
Дополнительный код.
При округлении отрицательной дроби, заданной в дополнительном коде, различают два случая. Если справа от ДР находится хотя бы одна единица, то в ДР прибавляется единица округления, после чего все разряды, начиная с дополнительного, отбрасываются. Если в ДР находится единица и эта единица является младшей в коде числа, то все разряды, начиная с дополнительного, просто отбрасываются.
Литература
1. Самофалов К.Г., Романкевич А.М., и др. Прикладная теория цифровых автоматов. - Киев. “Вища школа” 1987.
2. Соловьев Г.Н. Арифметические устройства ЭВМ. - М. “Энергия”. 1978.
3. Савельев А.Я. Прикладная теория цифровых автоматов - М. “Высшая школа”. 1987.
4. Каган Б.М. Электронные вычислительные машины и системы. - М. Энергоатомиздат. 1985.
5. Лысиков Б.Г. Арифметические и логические основы цифровых автоматов. - Минск. “Вышэйшая школа”. 1980.