Представление информации в форме с фиксированной и плавающей точкой

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

0.0000000000000002 = 010

0.1000000000000002 = 0.510

1.0000000000000002 = 1.010

Разряд двоичного числа представляется в ЭВМ некоторым техническим устройством, например триггером, двум различным состояниям которого приписывают значения 0 или 1. Набор соответствующего количества таких устройств служит для представления многоразрядного двоичного числа.

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

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

Знак   2-1 2-2         2-31

0 1 2 3 4 5 6 ….. 31 -представление двоичных чисел с фиксированной точкой в виде 32-разрядных слов для случая закрепления точки перед старшим разрядом.

 

Знак   230         20

0 1 2 3 4 5 6 ….. 31 -представление двоичных чисел с фиксированной точкой в виде 32 разрядных слов для случая закрепления точки после младшего разряда.

Для кодирования знака числа используется «знаковый» разряд: 0 - это + (плюс), 1 - это (минус). Наибольшее положительное число, представимое в первой разрядной сетке, равно 0,1..1 = 1-2-31 , а наименьшее число 0,00…01 = 2-31 Таким образом, в разрядной сетке могут быть представлены числа в диапазоне от –(1-2-31) до -2-31 и от 2-31 до (1-2-31). Диапазон чисел, для второго случая:

1£ ½х½£ 231-1.

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

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

Недостаток формата с фиксированной точкой (сравнительно небольшой диапазон представляемых чисел) устраняется представлением чисел в формате с плавающей точкой (floating point format), который является основным в компьютерах. Одако наряду с этой формой представления используется также и представление с фиксированной точкой для целых двоичных чисел и операций над ними, в частности операции над кодами адресов.

В формате с плавающей точкой разряды числа разбиваются на два поля, имеющие названия мантисса и порядок. Если обозначить мантиссу буквой M, а порядок - P, то величина числа X =_{M}{P}. Эта запись является двоичным эквивалентом известной формы записи десятичных чисел X=M 10, например, 200=210+2, 36000000000=3610+9. структура 16-pазpядного числа в представлении с плавающей точкой и примеры даны в таблице.

Знак порядка Модуль порядка Знак мантиссы Модуль мантиссы Результат
14…10 8…0  
020
-120
-1402-4
511231

 

Из последнего примера видно, что всего 16 бит могут представлять очень большие числа. Но, отобрав шесть разрядов под порядок, мы уменьшили точность представления числа.

Интересной особенностью формата с плавающей точкой является возможность представления одного числа различными комбинациями значений мантиссы и порядка. Так, например, нуль в этом формате может быть записан 64 способами (мантисса равна 0, порядок принимает любое значение), другие числа могут иметь до 9 представлений, например:

32=12+5=22+4=42+3=82+4=162+1=322+0

2560=52+9=102+8=202+7=402+6=802+5=…=12802+1.

Несмотря на это, представление чисел в формате с плавающей точкой оказалось достаточно удобным для обработки на ЭВМ больших и дробных чисел, хотя при этом пришлось пойти на некоторые дополнения. Так, например, чтобы увеличить точность числа, для его представления отводят два, а иногда и четыре 16-pазpядных поля. Вообще же в вычислительных машинах используются отличающиеся друг от друга форматы с плавающей точкой, но основаны они на едином принципе представления: порядок и мантисса. Для выполнения арифметических операций над числами в формате с плавающей точкой используются точные правила, зависящие от конкретной реализации ЭВМ, но содержащие общий подход. Так, сложение и вычитание чисел с плавающей точкой сводится к выравниванию позиций точки с тем, чтобы оба числа имели одинаковый порядок, а затем производится сложение или вычитание мантисс. Для умножения и деления выравнивания позиций точек не требуется; производится лишь сложение (при умножении) или вычитание (при делении) порядков и умножение или деление мантисс.

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

Представление числа с плавающей точкой в общем виде имеет вид:

X= spq ; ½q½ < 1

где q мантисса числа Х,

p – порядок,

s – основание характеристики.

Обычно число s совпадает с основанием мантиссы q. Мантисса q – правильная дробь. Порядок p, который может быть положительным или отрицательным целым числом, определяет положение запятой в числе Х. Для двоичных чисел

х = 2pq; ½q½ < 1.

Рассмотрим пример в котором слова имеют длины 32 двоичных разряда. Пусть число Х =2pq, изображается в машине двоичным словом а0в0в1 … в6а1а2…. a24 которому соответствует следующий формат данных:

a0 b0 b1 b6 a1 a2         a24

Разряды в0..в6 используются для представления порядка при этом разряд в0 изображает знак порядка, а разряды в1.. в6 – модуль порядка, остальные разряды а0 .. а24 отводятся под изображение мантиссы, причем а0 – знак мантиссы а1.. а24 – модуль мантиссы. Двоичное число х= 2pq, называется нормализованным, если мантисса Q удовлетворяет следующему условию 1 > ½q½ ³ ½, т.е. двоичное число нормализовано если в старшем разряде мантиссы стоит 1. Под порядок отведено со знаком 7 разрядов то порядок может быть от –63 до +63 соответственно. Наибольшее и наименьшее нормализованное положительные числа в этой разрядной сетке соответственно равны:

263*0,111 … 1 = 263(1-2-24) и

2-63*0,1000..0=2-64.

Следовательно с учетом знака q в этой разрядной сетке можно представить числа, лежащие в диапазоне от –263(1-224) до –2-64 и от +2-64 до +263(1-2-24), что значительно превышает диапазон чисел с фиксированной точкой, представимых в том же 32х-разрядном слове. При фиксированном количестве разрядов мантиссы любая величина, представляется в машине с наибольшей возможной точностью нормализованным числом. Если в процессе вычислений получается ненормализованное число, то машина с плавающей запятой автоматически нормализует его. Пусть r старших разрядов мантиссы равно 0. Тогда, нормализация заключатся в сдвиге мантиссы на r разрядов влево и уменьшении порядка на r единиц. При этом в младшие r разрядов мантиссы записывается 0. В последних моделях ЭВМ получило распространение представление чисел с плавающей запятой в системах счисления с основанием, равным целой степени числа 2 (S=2w), х = spq(1>½q½³1/s). При этом порядок представляется двоичным целым числом, а мантисса q – числом, в котором группы по w двоичных разрядов изображают цифры мантиссы с основанием системы счисления s=2w. Использование для чисел с плавающей запятой недвоичного основания несколько уменьшает точность вычислений (при заданном количестве разрядом мантиссы), но позволяет увеличить диапазон представимых в машине чисел и ускорить выполнение некоторых операций, в частности нормализации, за счет того, что сдвиг может производиться на несколько разрядов сразу. В ЕС ЭВМ числа с плавающей запятой представляются в шестнадцатеричной системе счисления: х=16pq (1>q³1/16) .

a0 b0 b1 b6 r1 r2         r6

Модуль порядка p изображается целым шестиразрядным двоичным числом,. а мантисса q рассматривается как число, составленное из шестнадцатеричных цифр в виде:

q=å Гj 16-jj = 0,1,2 …, F)

j=1

В случае с шестнадцатеричными числами с плавающей запятой число Х считается нормализованным, если старшая шестнадцатеричная цифра Г1 отлична от 0. В нормализованном числе три старшие двоичные цифры могут равняться 0. Диапазон представления нормализованных чисел: -1663(1-16-6) до –16-64 и от +16-64 до 1663(1-16-6). Для упрощения операций над порядками их сводят к действиям над целыми положительными числами, применяя представление чисел с плавающей запятой со смещенным порядком (ЕС ЭВМ). В случае чисел со смещенным порядком при записи числа в память к его порядку p прибавляется целое число – смещение N=2k, где k – число двоичных разрядов, используемых для модуля порядка. Смещенный порядок pсм=p + N всегда положителен. Для его представления нужно такое же число разрядов как для p со знаком.

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

3.6. Прямая, обратная и дополнительная форма представления двоичных чисел в ЭВМ

В ЭВМ с целью упрощения арифметических операций применяют специальные коды для представления чисел. Например, упрощается определение знака результата операции, вычитание есть сложение кодов, облегчено определение переполнения разрядной сетки. Положительные числа представляются в прямом коде. Прямой код Gпр двоичной дроби с (n-1)–разрядной мантиссой G=±0,к1,к2 …. к n-1 определяется как Gпр = ½G½когда G³0 и ½1+G½, когда G £ 0 Прямой код целого n – разрядного двоичного числа G = ±кn-2,kn-3, …k1,k0 имеет вид Gпр=½G½при G³0 и 2n-1+½G½ при G£0. Прямой код числа со знаком можно рассматривать как двоичное число без знака , которое определяется этими соотношениями. Операция вычитания (алгебраического сложения) сводится к операции простого арифметического сложения при помощи обратного и дополнительного кодов, используемых для представления отрицательных чисел в машине. Что бы представить двоичное отрицательное число в обратном коде нужно в знаковый разряд поставить 1, а во всех других разрядах заменить 1 нулями, а 0 – единицами. При этом отрицательная двоичная дробь G-= -0,k1,k2, …, kn-1в обратном коде примет вид

G-обр= 1,r1,r2, …,rn-1 ,

а отрицательное двоичное число G= - kn-2,kn-3, …,k1,k0 соответственно

G-обр= 1,rn-2,rn-3, …,r1,r0 где ri=0 , если ki=1 и наоборот.

При представлении отрицательного двоичного числа в дополнительном коде ставят 1 в разряд знака, а цифровую часть числа заменяют дополнением модуля числа до 2 или соответственно 2n, для дробей и целых чисел. Дополнительный код отрицательного числа G- определяется выражением G-доп=2- ½G-½, если G- - двоичная дробь, и G-доп = 2n - ½G-½ если G- - целое двоичное число. Таким образом, дополнительный код числа может быть получен из обратного путем прибавления 1 к младшему разряду обратного кода.