Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Арифметика раздел 5.doc
Скачиваний:
6
Добавлен:
14.08.2019
Размер:
975.36 Кб
Скачать

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

Математики представляют числа в виде

,

где M – мантисса; P – основание системы счисления; E – порядок (целое).

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

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

–385 000 000 000 000 000 и –3,8510+17; –0, 000 000 000 000 000 385 и –3,8510-16.

Лаконичность записи проявляется в сокращении числа символов в строке представляющей число и достигается путем замены нулей указателем фактического положения запятой по сравнению с ее положением в мантиссе. Указателем является порядок числа. Знак порядка указывает на направление смещения запятой ((+) вправо, (–) влево), а модуль порядка – количество разрядов, на которые должна быть смещена запятая с дополнением числа недостающими нулями при необходимости. Действительно, смещая в мантиссе (–3,85) запятую вправо на 17 разрядов, получим: –385 000 000 000 000 000; смещая запятую влево на 16 разрядов, получим: –0, 000 000 000 000 000 385.

Это достоинство можно усилить, если задать по умолчанию положение запятой в мантиссе, например, после первого значащего разряда; знак и значение P, так как они присутствуют в записях любых чисел. Тогда длины цепочек символов сократятся. Числа в предшествующем примере примут вид –385+17 и –385–16.

Справедливости ради заметим, что представление числа близкого к единице в полулогарифмической форме приводит не к сокращению длины цепочки символов, а к ее увеличению, даже при введенном усовершенствовании. Например, числа –3,85 и –0,385 при соглашении о фиксации запятой в мантиссе после первого значащего разряда примут вид: –385+0 (–3,8510+0) и –385–1 (–3,8510-1).

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

Н а рис.5-1 представлен формат числа с плавающей точкой. Формат числа состоит из позиций. Позиции формата пронумерованы слева направо, начиная с 0. В одной позиции размещается код одного символа – знака или цифры в зависимости от назначения позиции. Формат разбит на три не пересекающиеся поля, включающие не менее одной позиции. Поле предназначено для записи в нем компоненты числа. Число представлено тремя компонентами, заданными в явной форме: кодами знака числа, порядка и мантиссы. Мантисса число без знака. Вставка порядка между знаком числа и мантиссой лишь подчеркивает их независимость. При любом способе кодирования мантиссы знак числа дан непосредственно и его прочтение не усложняется.

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

Мантисса и порядок обычно хранятся в системе счисления с основанием числа P. Однако, например, в системе IBM 360, мантиссу хранят в двоично-шестнадцатеричной системе счисления, основание числа выбрано , порядок – двоичный, причем типы кодов мантиссы и порядка, основание числа, основание порядка и длины полей заданы по умолчанию.

Мантиссу можно рассматривать как число без знака в формате с фиксированной точкой. Положение точки в мантиссе подразумевают. Это положение точки является исходным и соответствует действительному ее положению в числе только при порядке . При порядке отличном от нуля мантисса умножается на . Это приводит к сдвигу разрядов мантиссы относительно точки вправо или влево в зависимости от знака порядка на разрядов или, это то же самое, к сдвигу влево или вправо положения точки в мантиссе на позиций относительно исходной позиции точки заданной по умолчанию. Таким образом, значение порядка указывает на фактическое положение точки, которая “плавает” под управлением порядка. Отсюда происходит название этого способа представление числа в формате с плавающей точкой. Название акцентирует внимание на ограничения, вызванные форматом представляемых чисел, и на возможность управлять положением точки.

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

Порядок – обычно целое со знаком и в той же системе счисления, что и мантисса. Но не исключена возможность представления порядка в иной системе счисления без знака или со знаком. Предельные значения порядка в сочетании с предельными значениями мантиссы определяют диапазон модулей чисел не равных нулю представляемых в формате. Так, например, при десятичная мантисса с точкой фиксированной перед дробной частью имеет предельные значения не равные нулю и . Предельные значения двухразрядного десятичного порядка со знаком и . Диапазон модулей чисел не равных нулю представляемых в таком формате . Если точку в мантиссе фиксировать справа от позиции и принять предельные значения порядка и , сместив значения порядка на (–4), то можно получить тот же диапазон чисел представляемых в формате.

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

П

A B C D

–3,12: 1|00|3.120| 1|01|.6879| 1|10011|3120| 1|03|0.00|3120|

–3,12: 1|01|0.312| 1|02|.6879| 1|10010|0312| 1|04|0312|

–312: 1|02|3.120| 1|03|.6879| 1|10001|3120| 1|05|3120|

+0,0312: 0|12|3.120| 0|11|.3120| 0|10101|3120| 0|01|3120|

ример 5-1
. Пусть в формате рис.5-1 для хранения десятичных чисел выделены одна позиция для знака числа, две позиции для прямого кода одноразрядного десятичного порядка со знаком (в вариантах A,B,D), четыре позиции для хранения разрядов десятичной мантиссы.

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

В варианте A поле порядка формата содержит позиции для хранения порядка со знаком. В левой позиции поля расположен знак порядка (выделен жирным шрифтом). Положение точки в поле мантиссы выбрано справа от старшей позиции. В примерах для удобства точка показана, хотя конечно ее положение задают по умолчанию. Поля порядка и мантиссы содержат прямые коды. Код 1|00|3.120| следует читать как –3,12010+0=–3,12. Во второй строке это же число представлено кодом 1|01|0.312|. Его значение –0,31210+1=–3,12. В последней строке значение числа +3,12010-2=+0,0312.

В варианте B положение точки выбрано слева от старшей позиции поля мантиссы. Код порядка прямой, а мантиссы обратный. Поэтому для прочтения значения кода 1|01|.6879| отрицательного числа необходимо заменить в поле мантиссы коды цифр обратными 1|01|.3120|. Полученному прямому коду соответствует значение –0,312010+1= –3,12. Последняя строка содержит обратный код положительного числа. Поэтому цифры в поле мантиссы прямые.

В варианте C мантисса в прямом коде. Точка в поле десятичной мантиссы размещена справа от последней позиции. Поэтому мантисса число целое. Порядок в прямом двоичном коде со знаком. Длина поля порядка увеличена до . В первой строке код порядка 10011 имеет значение (–3). Следовательно, точку в мантиссе следует сдвинуть на 3 позиции влево. Поэтому код в первой строке имеет значение -3,120.

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

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

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

Смещенный порядок (biased exponent) применяют для устранения отрицательных значений порядка. Для кодирования порядка E со знаком к порядку E прибавляют константу и получают смещенный порядок

. (5-01)

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

Двоичный порядок со знаком в поле порядка длиной будет иметь предельные значения . Чтобы сохранить длину поля порядка и диапазон порядка прежними, можно выбрать или . Например, при порядок ; . Смещение bias можно выбрать 127 или 128.

При смещенный код порядка будет , а смещенный код порядка станет равным . Код FF16 (25510) оказывается “лишним”, т.к. он не будет использоваться при выбранном диапазоне значений порядка.

При bias=128 предельные значения смещенных порядков и . Лишним будет код 0016.

Появление лишних кодов вызвано тем, что в прямом коде используются два кода для представления значения равного нулю 0016 (+0) и 8016 (–0). В смещенном порядке для кодирования значения ноль применяется только один код 7F16 или 8016.

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

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

Сравните порядки +12 и +14, а затем –12 и –14. Если эти же порядки будут смещены, например на 127, то значение их кодов будут 139 и 141 или 115 и 113. Очевидно, что правило сравнения смещенных порядков проще.

При bias=128 смещенный код порядка совпадает с дополнительным кодом порядка во всех разрядах кроме разряда знака. В разряде знака он содержит цифру обратную коду знака, так, как если бы знак (+) кодировали цифрой 1, а знак (–) – цифрой 0.