Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОДЕРЖАНИЕ 3 (2).doc
Скачиваний:
46
Добавлен:
31.08.2019
Размер:
6 Мб
Скачать
☆
        1. Округление дополнительного кода отрицательного числа

Правила округления дополнительного кода отрицательного числа зависят от применяемого варианта кодирования (раздел 3.2). Рассмотрим вначале округление дополнительного кода варианта B, в котором код 1|00…0 применяется для кодирования числа. Затем рассмотрим особенности округления дополнительных кодов вариантов A и C.

Если все сокращаемые разряды исходного кода равны 0, то результат их сокращения дополнительный код числа равного исходному числу. Результат округления точный.

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

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

Дополнительный код числа ближайшего к исходному числу и смещенного к нулю равен укороченному исходному коду, увеличенному на +1 младшего разряда формата результата. Прибавление +1 (или, что равносильно, вычитание -1) должно выполняться по правилам сложения/вычитания дополнительных кодов чисел (раздел 4.3).

Пример 3-15. Выполнено округление дополнительного кода отрицательных чисел к нулю и от нуля с сокращением двух младших разрядов. В вариантах A-D дополнительные коды десятичных чисел, а в вариантах D-F – двоичных. В скобках даны значения кодируемых чисел. В исходном коде NT двойки сокращаемых разрядов зачеркнуты. В строке N1 приведены результаты округления со смещением числа к нулю, а в строке N2 – от нуля. Дополнительные коды в строке N2 получены отбрасыванием сокращаемых разрядов исходного кода, а в строке N1 – сложением дополнительного кода строки N2 с дополнительным кодом +1.

В вариантах A и E исходный дополнительный код принадлежит примерно середине диапазона отрицательных чисел с тремя разрядами целого.

В вариантах B и F исходные коды кодируют максимальные отрицательные числа, принадлежащие отрицательной области полной потери значимости (рис.3-5). Отбрасывание сокращаемых разрядов приводит к получению дополнительного кода результата округления отстоящего дальше от нуля, что видно из сопоставления исходного числа и результата округления. Увеличение сокращенного дополнительного кода на 1 младшего разряда приводит к получению дополнительного кода нуля. Этот нуль является машинным нулем, так как исходное число не равно нулю.

И

A B C D

NT: 1|545|9960д (-454,004) 1|999|9990д (-0,001) 1|989|9990д (-10,001) 1|000|0001д (-999,9999)

N2: 1|545|99 д (-455,01) 1|999|99 д (-0,01) 1|989|99 д (-10,01) 1|000|00 д (-1000,0)

+ 1 + 1 + 1 + 1

N1: 1|546|00 д (-454,00) 0|000|00 д (+0,00) 1|990|00 д (-10,00) 1|000|01 д (-999,99)

E F G H

NT: 1|010|0110д (-101,101) 1|111|1110д (-0,001) 1|101|1110д (-10,001) 1|000|0001д (-111,1111)

N2: 1|010|01 д (-101,11) 1|111|11 д (-0,01) 1|101|11 д (-10,01) 1|000|00 д (-1000,00)

+ 1 + 1 + 1 + 1

N1: 1|010|10 д (-101,10) 0|000|00 д (+0,00) 1|110|00 д (-10,00) 1|000|01 д (-111,11)

з вариантов B и F следует, что исключительная ситуация машинный ноль может сложиться при любой длине поля целого в формате результата, если в заданном режиме округления выбирается код числа ближайшего к нулю, сложилась ситуация потери точности и все цифры в укороченном исходном коде обратные нулю. Машинный ноль всегда имеет знак (+).

В вариантах D и H исходные дополнительные коды кодируют минимальные отрицательные числа с ненулевыми сокращаемыми разрядами. Округление этих и даже больших чисел в прямом и обратном коде приводит к увеличению количества значащих разрядов в поле целого и к переполнению исходного формата (см. примеры 3-13 варианты E,J и 3-14 варианты D,H). При округлении в дополнительном коде количество значащих разрядов в поле целого не увеличивается и переполнение исходного формата не складывается. Поскольку результат округления дополнительного кода 1|00…0|00…0 минимального числа всегда точный, исключительная ситуация переполнение при записи округленного кода в формат результата с длиной поля целого такой же как в формате исходного кода сложиться не может. Округление этих и даже больших чисел в прямом и обратном коде приводит к увеличению количества значащих разрядов в поле целого и к переполнению формата исходного кода (см. примеры 3-13 варианты E,J и 3-14 варианты D,H).

В прямом и обратном коде количество значащих разрядов в числе и в его коде совпадает при любом знаке числа. В дополнительном коде отрицательного числа нет однозначного совпадения количества значащих разрядов в числе и в его коде. Количество значащих разрядов в числе может быть на 1 разряд больше, чем в его коде. Например, в вариантах C и G примера код N1 имеет 3 значащих разряда, а кодируемое им число – 4; код N2 и кодируемое им число имеют по 4 значащих разряда.

При округлении в прямом и обратном коде количество значащих разрядов в поле целого может сохраняться или увеличиваться на 1 разряд. При округлении отрицательного числа в дополнительном коде количество значащих разрядов в коде поля целого может сохраняться или уменьшатся на 1 разряд. В вариантах C и G примера в исходном коде NT в поле целого 2 значащих разряда, а в результате округления N1 со смещением к нулю – 1, причем количество значащих разрядов целого в кодируемых числах не изменилось. В вариантах A и E примера при любом варианте округления количество значащих разрядов в коде и в соответствующем ему числе сохраняется неизменным.

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

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

  1. Результат округления, не являясь машинным нулем, в сокращаемых разрядах целого содержит хотя бы одну цифру не обратную нулю.

  1. Исходный код в сокращаемых разрядах целого содержит хотя бы одну цифру не обратную нулю.

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

Например, в вариантах A,D,E,H примера 3-15 ситуация переполнение сложится при записи кода в формат результата с длиной поля целого меньшей чем 3, так как в сокращаемых разрядах целого цифры не обратные нулю.

В вариантах B,F ситуация переполнение не сложится при записи кода в формат результата даже с длиной поля целого равной нулю.

В вариантах C и G ситуация переполнение не сложится при записи кодов в формат с двумя разрядами целого, так как сокращаемый разряд содержит цифру обратную нулю. Если формат результата имеет 1 разряд целого, то ситуация переполнения сложится при записи кода N2 и не сложится при записи кода N1. В последнем случае, при определении ситуации по правилу 2, срабатывает исключение.

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

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

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

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

Исключения вызваны тем, что пары кодов до и после записи в формат результата вида 1|000|00 и 1|9000|00 или 1|900|00 и 1|00|00 кодируют равные числа с количеством значащих разрядов равным количеству позиций в формате результата.

Особенности округления дополнительного кода варианта A или C. В варианте A код вида 1|00…0 кодирует число (-0). В варианте C код вида 1|00…0 кодирует не число (NaN). При записи дополнительного кода в вариантах A или C в формат результата исходный код проверяют на 1|00…0 и, если исходный код имеет это значение, в формат результата записывают код числа (-0) или код NaN. В противном случае выполняют округление и запись округленного кода в формат результата по правилам, изложенным для варианта B дополнительного кода со следующими изменениями.

  1. Результат округления от нуля равный 1|00…0д кодирует число, код которого может быть записан только в форматы результата с длиной поля целого большей, чем количество разрядов целого в исходном коде. При записи этого кода в иные форматы складывается ситуация переполнения. Например, код N2 в вариантах D и H примера 3-15 при записи в формат с 3 позициями целого будет интерпретироваться как (-0) или как NaN, а не как код числа -1000,0. При записи в формат с 4 позициями целого этот код в варианте D будет расширен до 1|9000|00д (-1000,0), а в варианте H – до 1|1000|00д (-1000,0), что исключит ошибку интерпретации.

  1. При округлении кода варианта A к нулю блокируют перенос в разряд знака. Тогда результат округления сохранит знак (-) и код машинного нуля будет иметь значение (-0). Например, в вариантах B и F примера 3-15 результат округления к нулю (N1) будет 1|000|00 (-0).

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