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

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

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

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

        1. Округление прямого кода числа

Признак ситуации потери точности – не 0 хотя бы в одном отбрасываемом разряде.

Результат сокращения не равных 0 младших разрядов исходного кода является прямым кодом числа ближайшего к исходному числу и к 0. Прямой код ближайшего числа отстоящего дальше от 0 равен сокращенному исходному коду, значащие разряды которого увеличены на +1 младшего разряда формата результата.

Пример 3-13. Выполнено округление прямого кода чисел к нулю и от нуля с сокращением двух младших разрядов. В вариантах A коды десятичных чисел, а в вариантах F-J – двоичных. Двойки сокращаемых разрядов в исходном коде NT зачеркнуты. Во всех вариантах складывается исключительная ситуация потери точности, так как сокращаемые разряды исходного кода не равны 0.

В строке N1 приведены результаты округления прямого кода NT, смещенные к нулю (рис. 3-7), а в строке N2 – смещенные от нуля относительно точного исходного кода NT.

В двойках вариантов A,B и F,G прямые коды NT отличаются только знаком. Сопоставление кодов результатов округления N1 или N2 показывает, что способы округления к нулю и от нуля прямого кода не зависят от знака исходного кода. Они сводятся к простому отбрасыванию сокращаемых разрядов в коде NT для получения кода результата округления к нулю и к увеличению укороченного кода на +1 при вычислении результата округления от нуля.

В вариантах C и H код N1 – машинный ноль. Знак машинного нуля всегда совпадает со знаком исходного кода. Следовательно, при выборе в качестве результата округления кода числа смещенного к нулю может складываться исключительная ситуация машинный ноль независимо от длины поля целого в формате результата. Ее признак – наличие нулей во всех сохраняемых разрядах исходного кода в ситуации потери точности. Если складывается ситуация машинный ноль, то складывается ситуация потери значимости, так как старший разряд в формате результата 0, и точность округленного числа меньше точности формата.

В

A B С D E

NT: 0|754|9928 1|754|9928 1|000|0051 0|009|9928 1|999|9928

N1: 0|754|99 1|754|99 1|000|00 0|009|99 1|999|99

+ 1 + 1 + 1 + 1 + 1

N2: 0|765|00 1|765|00 1|000|01 0|010|00 1|1000|00

F G H I J

NT: 0|101|1101 1|101|1101 1|000|0001 0|001|1101 1|111|1101

N1: 0|101|11 1|101|11 1|000|00 0|001|11 1|111|11

+ 1 + 1 + 1 + 1 + 1

N2: 0|110|00 1|101|00 1|000|01 0|010|00 1|1000|00

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

Варианты D и I иллюстрируют, что количество значащих разрядов в коде округленного числа зависит от выбранного метода округления. В N1 значащих разрядов 3, а в N2 – 4. При записи в формат результата с двумя позициями в поле целого кода N1 сложится исключительная ситуация потери значимости, а при записи в этот же формат кода N2 – она не сложится. При записи в формат с одной позицией поля целого кода N1 исключительная ситуация переполнения не сложится, а при записи в него кода N2 она не сложится.

В вариантах E и J количество значащих разрядов в поле целого в коде числа N2 больше на 1 разряд, чем в поле целого формата исходного кода. При записи кода N2 в формат результата с длиной поля целого равной длине поля целого в формате исходного кода сложится исключительная ситуация переполнения формата результата, а при записи его в формат с длиной поля целого большей на одну позицию ситуация потери значимости не сложится.

В вариантах D,I и E,J увеличение количества значащих разрядов в коде N2 вызвано переносом равным 1 из старшего значащего разряда при сложении укороченного исходного кода с +1 и может случиться, только если все значащие цифры в укороченном исходном коде обратные нулю. Увеличение количества значащих разрядов может приводить к переходу округленного числа через границы чисел представимых в формате результата и вызывать ситуацию переполнения формата или, напротив, исключать ситуацию потери значимости.

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

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

Ситуация потери значимости складывается, если

  • поле целого в формате результата больше чем в исходном формате;

  • поля целого в форматах совпадают, и старший разряд в исходном формате содержит 0;

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

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

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

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

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

Ситуация потери значимости складывается, если

  • поле целого формата результата превышает поле целого исходного формата более чем на 1 разряд;

  • поле целого формата результата превышает поле целого исходного формата на 1 разряд и в сохраняемых разрядах исходного кода есть цифра не обратная 0;

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

Ситуация машинный ноль сложиться не может.

Признак равно удаленности исходного числа от ближайших чисел в формате результата в прямом коде не зависит от знака числа. Число равно удалено, если количественный эквивалент цифры в старшем отбрасываемом разряде кода равен P/2 и остальные разряды содержат нули. Например, в десятичной системе счисления код в отбрасываемых разрядах 500…0, в двоичной – 100…0.

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