Кодирование и обработка вещественных чисел

Кодирование и обработка целых чисел со знаком

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

Первый способ – называется прямым кодом. При этом один (старший) разряд в машинном слове (напомним, здесь машинное слово – 16 разрядов) отводится для записи знака числа; при этом условились кодировать знак «+» нулем, а знак «-» единицей. Под запись самого числа, очевидно, остается 15 двоичных разрядов, что обеспечивает наибольшее значение числа . Однако прямое кодирование усложняет вычисления. Например, операция сложения двух чисел с разными знаками должна быть заменена операцией вычитания меньшего из большего с последующим присвоением результату знака большего по модулю числа. Таким образом, такая операция сопровождается рядом проверок условий и выработкой признаков, в соответствии с которыми выбирается то или иное действие.

Второй способ - кодирования целых чисел со знаком называется дополнительным кодированием. Идея построения дополнительного кода такова: на оси целых чисел ( – всего 65536 чисел), помещающихся в машинное слово (в 16 разрядов) сместим положение нуля к середине интервала. При этом числа из первой половины ( ) интервала будем считать положительными, а числа из второй половины ( ) будем считать отрицательными. Судить о знаке числа можно по его величине, и в явном виде выделение знака не требуется. Оказывается, что принадлежность кода к интервалу кодов положительных или отрицательных чисел также видна по состоянию старшего бита – у кодов положительных чисел его значение «0», а у кодов отрицательных – «1». Это напоминает представление чисел с помощью прямого кода, но принцип построения дополнительного кода другой. Применение дополнительного кода позволяет заменить вычитание чисел их суммированием в дополнительном коде.

Рассмотрим вычитание числа , что эквивалентно прибавлению .

При наличии kразрядов можно закодировать чисел вP-ичной системе счисления. При этом максимальноеk-разрядноеP-ичное число есть , а число (оно содержит разрядов) можно считать нулем, так как первые слева (младшие)kразрядов (битов) в числе нулевые, а старший, единичный бит в нем уже не входит в отведенную разрядную сетку. Таким образом, можно записать:

. (12.5)

Однако вычесть из будет удобнее, если (12.5) преобразовать:

, (12.6)

причем число есть максимальноеP-ичноеk-разрядное число , каждая его цифра равна :

, (12.7)

, (12.8)

Цифры числа Zобозначим :

. (12.9)

Таким образом, с учетом (12.8) и (12.9), выражение (12.7) легко преобразуется:

. (12.10)

Величина (12.10) называется дополнением целого k-разрядного числа Z в системе счисления P.

Пример. ;

.

Важным свойством дополнения является то, что его сумма с исходным числом в заданной разрядной сетке равна нулю, то есть

. (12.11)

Пример. ;

.

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

Из (12.11) логично заключить, что

, (12.12)

значит, при имеем

. (12.13)

Поэтому дополнительный код (DС)двоичных чисел в компьютере надо строить согласно следующему правилу:

  • для дополнительный код совпадает с самим числом, то есть ;
  • для дополнительный код совпадает с дополнением модуля числа, то есть .

Пример. Построить дополнительный двоичный код числа .

;

Пример. Построить дополнительный двоичный код числа .

.

Кстати, используя результаты этих примеров, легко убедиться, что

.

Прямые и дополнительные коды целых чисел со знаком сопоставлены в табл. 19.

В компьютере используется интервал целых чисел со знаком, закодированных дополнительным двоичным кодом. Именно таким является диапазон значений чисел типа Integer в языке PASCAL.

В компьютере перевод в дополнительный код осуществляется автоматически при вводе чисел. Именно в таком виде числа хранятся в ОЗУ и участвуют в арифметических операциях.

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


 

Кодирование и обработка вещественных чисел

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

Ситуация радикальным образом меняется в случае представления и обработки вещественных чисел. На математической числовой оси вещественные числа образуют непрерывное множество (континуум), поэтому на любом (на сколь угодно малом) интервале вещественной оси содержится бесконечное количество значений. В машинном представлении количество возможных значений чисел конечно и составляет , гдеP– основание используемой в машине системы счисления,k– количество отведенных разрядов.

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

Из данного обстоятельства вытекает ряд следствий:

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

если , то ;

если , то ;

если , то .

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

3. Математическое понятие «нуль» как точное значение числа заменяется в компьютерном представлении понятием «машинный нуль». Машинным нулем считаются числа со значениями, меньшими определенной величины. Например, в типеRealязыкаPASCALлюбое десятичное число, по модулю меньшее является машинным нулем, то есть считается равным нулю при хранении и в математических операциях.

Основной формой представления кодов вещественных чисел в компьютере является двоичная нормализованная. При этом записываться и храниться в памяти компьютера должны все составляющие нормализованной формы числа: знак числа, мантисса, знак порядка числа, порядок, что, разумеется, требует нескольких ячеек памяти. Например, числа типа RealязыкаPASCALразмещаются в 6 байтах (3 ячейки по 16 бит), то есть каждое число занимает 48 двоичных разрядов. Непосредственное распределение компонентов нормализованного числа по разрядам определяется конструктивными особенностями компьютера и программным обеспечением. Ниже приведен пример размещения вещественного нормализованного числа в двух ячейках памяти (32 разряда) (рис. 3):

32 31 30 29 28 27 26 25 24 23 2 1
1 0 0 1 0 1 0 1 1 0 0 1

Мантисса

Поскольку значение мантиссы лежит в интервале , то нуль из разряда целых и разделитель разрядов в представление не включаются, то есть представление мантиссы содержит только цифры дробной части. Более того, можно не сохранять первую значащую цифру двоичной мантиссы (старший разряд из дробной части), поскольку она всегда «1» (но, естественно, перед вычислениями она восстанавливается!). Это дает возможность хранить дополнительный разряд, то есть на один разряд повысить точность обработки.

В ходе выполнения арифметических операций производится нормализация промежуточных и конечного значений, состоящая в сдвиге разделителя разрядов вправо или влево с одновременным соответствующим изменением порядка числа. Именно поэтому такая форма представления чисел называется представлением «с плавающей точкой».

Как и в случае целых чисел, для кодов вещественных чисел существует понятие переполнения, однако возникает оно не после заполнения разрядной сетки (это предотвращается нормализацией числа), а после заполнения всех разрядов порядка. Изначальной причиной погрешности в обработке кодов вещественных чисел является ограниченность разрядной сетки. Величина погрешности зависит от количества имеющихся разрядов. Уменьшить погрешность можно за счет расширения разрядной сетки, то есть выделения большего количества ячеек памяти для записи числа. Например, в языкеPASCALопределен вещественный типExtended, числа которого занимают по 10 байт (80 бит).

 


Дата добавления: 2021-04-15; просмотров: 252; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!