Организация ЭВМ и систем. Однопроцессорные ЭВМ. Часть 1

         

Числа с плавающей запятой


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

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

X = Sp*q;               |q|<1,

где    q – мантисса (правильная дробь со знаком),

          p – порядок (целое число со знаком),

          S – основание,

          Sp – характеристика.

В ЭВМ q и p представлены в системе счисления с основанием S в соответствующей двоичной кодировке. Знак числа совпадает со знаком мантиссы. Порядок может быть как положительным, так и отрицательным и определяет положение точки в числе X. Арифметические действия над ЧПЗ требуют помимо действий с мантиссами, определенные операции над порядками (сравнение, вычитание и др.). Для упрощения операций над p их сводят к действиям над целыми положительными числами, применяя представление ЧПЗ со смещенным порядком.

В этом случае к порядку p прибавляют целое число R=2k, где k – число двоичных разрядов, используемых для представления модуля порядка. Смещенный порядок PСМ=P+R всегда больше нуля или равен ему. Для его представления требуется такое же количество двоичных разрядов, как и для представления знака и модуля p.

При фиксированном числе разрядов мантиссы любая величина представляется в ЭВМ нормализованным числом с наибольшей возможной точностью. Число называется нормализованным, если мантисса q удовлетворяет условию 1>|q|³1/S, т.е. старший разряд мантиссы в S-ричной системе счисления отличен от нуля, иначе число не нормализовано. Так, например, в десятичной системе счисления число 0.00726*10-3  не нормализовано, а число 0.726*10-5 – нормализовано.


В процессе вычислений числа могут оказаться ненормализованными. Обычно ЭВМ автоматически нормализует такие числа, выполняя ряд действий. На рис. 2.9 представлен обобщенный формат представления ЧПЗ в микро- и миниЭВМ.



Пусть r старших разрядов S-ричной мантиссы равны нулю. Тогда нормализация состоит:

- из сдвиг мантиссы на r разрядов влево;

- уменьшения PСМ





на r единиц;

- запись нуля в r младших разрядах мантиссы.

При этом число не изменяется, а условия нормализации выполняются.

Пример.

Нормализовать двоичное число.

Ненормализованное двоичное число:



Нормализованное двоичное число:



Пример.

Нормализовать двоичное число.

Ненормализованное двоичное число:



Нормализованное двоичное число:



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

- сдвиг мантиссы на один разряд вправо;

- увеличение PСМ

на единицу.

В различных ЭВМ числа с плавающей запятой используются в системах счисления с различными основаниями S, но равными целым степеням числа 2, т.е. S=2W. При этом порядок представляют целым числом, а мантиссу q – числом, в котором группы по W двоичных разрядов изображают цифры мантиссы с основанием системы счисления S=2W. В современных ЭВМ используются, как правило, S = 2, 16.

Использование S>2 позволяет:

- расширить диапазон представления чисел;

- ускорить выполнение операций нормализации, поскольку сдвиг может сразу происходить на несколько разрядов (при S=16 – сдвиг на 4 разряда).

Пример.

В результате операции получили (S=16):



Произведем нормализацию. Для этого q нужно сдвинуть влево на один шестнадцатеричный разряд, т.е. на 4 двоичные единицы, а из P вычесть 1. В результате получим



Итак, диапазон представляемых в ЭВМ чисел с плавающей запятой зависит от основания системы счисления S и числа разрядов, выделенных для P.


Точность вычисления для ЧПЗ определяется числом разрядов q. С увеличением числа разрядов q увеличивается точность, но одновременно увеличивается и время выполнения арифметических операций. Ввиду этого использование S, отличного от 2, несколько уменьшает точность вычислений при фиксированном числе двоичных разрядов q. Традиционно шестнадцатеричная арифметика используется в мэйнфреймах.

Задачи, решаемые на ЭВМ, предъявляют различные требования к точности вычисления, поэтому большинство машин общего назначения имеют несколько форматов ЧПЗ с различным числом разрядов q. Рассмотрим только короткие форматы ЧПЗ в ЭВМ с 32-разрядным словом, использующих шестнадцатеричную (S=16) и двоичную (S=2) системы счисления.

Формат ЧПЗ при S=16 представлен на рис. 2.10.



Всего под q отведено 24 двоичных разряда. Общая длина слова N – 32 двоичных разряда. Еще есть длинный формат (64 бита) и расширенный (128 бит). Во всех форматах под PСМ отведено по 7 двоичных разрядов (с первого по седьмой). Если бы порядок был несмещенный, то один двоичный разряд отводился бы под знак порядка и k разрядов – под модуль (k = 6). При этом диапазон изменения модуля несмещенного порядка P составил бы 0 ¸ 2k-1 или 0 ¸ 63, а полный диапазон изменения порядка Р = (-64) ¸ (+63). Выражение для смещенного порядка соответственно имеет вид                
.

Таким образом, при S=16 диапазон изменения PСМ = 0 ¸ 127.

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

Формат ЧПЗ при S=2 представлен на рис. 2.11.



Общая длина слова N – 32 двоичных разряда. Обычно еще есть длинный формат, имеющий N = 64 бита. В обоих форматах под смещенный порядок отведено 8 двоичных разрядов. Таким образом, диапазоны изменения смещенного и несмещенного порядков составляют соответственно

PСМ

= 0...255 и P = -128...+127 .

Поскольку числа в памяти хранятся в нормализованной форме, старший разряд q всегда равен единице, поэтому он не запоминается, а подразумевается., В таких ЭВМ точность представления числа фактически определяется мантиссой q в 24 двоичных разряда (короткий формат) и 56 двоичных разрядов (длинный формат).



Рассмотрим только короткие форматы.

Диапазон представления ЧПЗ определяется значением S и числом разрядов, отведенных под P.

Двоичное основание (S=2):       (k=7) Xmax=2127® 1038  .

Шестнадцатеричное основание (S=16):          (k=6) Xmax=1663® 1076  .

Точность представления ЧПЗ определяется значением S и числом разрядов мантиссы в соответствующей системе счисления. И при S=16, и при S=2 под q отведено фактически 24 двоичных разряда:

  • при S=2: 24 двоичных разряда обеспечивают точность, соответствующую семи десятичным разрядам;


  • при S=16: точность при использовании короткого слова (N = 32) ниже за счет другого способа нормализации, т.е. в q могут быть три нуля слева, поскольку шестнадцатеричное число при этом еще не равно нулю. В двоичных числах слева всегда единица, то есть разрядная сетка используется полнее. Пояснить это можно на примере 8-разрядной сетки:




  • При S=16 нормализация не произойдет, так как d1 не равно нулю. Это приведет к потере четырех младших разрядов результата. При S=2 нормализация произойдет и будет потерян только один младший разряд результата. В связи с этим в ЭВМ с S=16 обычно предусматриваются еще длинный и расширенный форматы.

    Еще до недавнего времени каждый производитель процессоров пользовался собственным представлением вещественных чисел (чисел с плавающей точкой). За последние несколько лет ситуация изменилась. Большинство поставщиков процессоров в настоящее время для представления вещественных чисел придерживаются стандарта ANSI/IEEE 754-1985 Standard for Binary Floating-Point Arithmetic.

    Стандарт описывает два основных формата ЧПЗ: одиночный (single – 32 бита) и двойной (double – 64 бита). В IEEE 754 не указан точный размер расширенного формата, но описаны минимальная точность и размер (79 бит).

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

    Одиночный формат

    Одиночный формат состоит из трех полей: 23-разрядной мантиссы f, 8-раз­рядного смещенного порядка e, знакового бита s (см.


    рис. 2.12).



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

    Таблица 2.3

    Комбинация значений полей

    Значение

    0 < e < 255

    (-1)s × 2e-127

    × 1.f

    (нормализованные числа)

    e= 0; f ¹ 0 (по крайней мере, один бит не нулевой)

    (-1)s × 2-126

    × 0.f

    (ненормализованные числа)

    e= 0; f = 0 (все биты нулевые)

    (-1)s × 0.0 (ноль со знаком)

    e= 255; f = 0 (все биты нулевые)

    INF (бесконечность со знаком)

    e= 255; f ¹0 (по крайней мере, один бит не нулевой)

    NaN (Not-a-Number)

    Значение неявного бита (старшего разряда мантиссы) прямо не задается, но подразумевается значением порядка. 23-разрядная мантисса вместе с неявным битом обеспечивает точность в 24 разряда.

    Двойной формат

    Двойной формат состоит из трех полей: 53-разрядной мантиссы f, 11-разрядного смещенного порядка e, знакового бита s. Эти поля хранятся в двух 32-разрядных словах, как показано на рис. 2.13. В x86–архитектуре слово с меньшим адресом содержит младшие разряды мантиссы, в то время как, например, в SPARC– архитектуре младшие разряды мантиссы содержит слово с большим адресом.



    В табл. 2.4 показано соответствие между значением трех полей и значением ЧПЗ двойной точности.

    Таблица 2.4

    Комбинация значений полей

    Значение

    0 < e < 2047

    (-1)s × 2e-1023

    × 1.f (нормализованное число)

    e = 0; f ¹ 0

    (-1)s × 2-1022

    × 0.f (ненормализованное число)

    e = 0; f = 0

    (-1)s × 0.0 (ноль со знаком)

    s = 0; e = 2047; f = 0

    +INF (положительная бесконечность)

    s = 1; e = 2047; f = 0

    -INF (отрицательная бесконечность)

    e = 2047; f ¹ 0

    NaN (Not-a-Number)

    Значение неявного бита (старшего разряда мантиссы) прямо не задается, но подразумевается значением порядка. 53-разрядная мантисса вместе с неявным битом обеспечивает точность в 54 разряда.

    Расширенный формат (SPARC– архитектура)



    Расширенный формат состоит из трех полей: 112-разрядной мантиссы f,

    15-разрядного смещенного порядка e, знакового бита s. Эти поля хранятся в четырех 32-разрядных словах, как показано на рис. 2.14. В SPARC–архитектуре младшие разряды мантиссы содержит слово с большим адресом.



    В табл. 2.5 показано соответствие между значением трех полей и значением ЧПЗ расширенного формата для SPARC–архитектуры.

    Таблица 2.5

    Комбинация значений полей

    Значение

    0 < e < 32767

    (-1)s × 2e-16383

    × 1.f (нормализованное число)

    e = 0; f ¹ 0

    (-1)s × 2-16382

    × 0.f (ненормализованное число)

    e = 0; f = 0

    (-1)s × 0.0 (ноль со знаком)

    s = 0; e = 32767; f = 0

    +INF (положительная бесконечность)

    s = 1; e = 32767; f = 0

    -INF (отрицательная бесконечность)

    e = 32767; f ¹ 0

    NaN (Not-a-Number)

    Расширенный формат (х86– архитектура)

    Расширенный формат состоит из 4-ч полей: 63-разрядной мантиссы f, явного старшего значащего бита j, 15-разрядного смещенного порядка e, знакового бита s.

    В х86–архитектуре эти поля сохранены в восьми последовательно адресованных 8-разрядных байтах. Однако UNIX System V Application Binary Interface Intel 386 Processor Supplement (Intel ABI) требует, чтобы числа расширенного формата занимали три последовательно адресованных 32-разрядных слова в стеке, оставляя 16 старших бит неиспользованными, как показано на рис. 2.15.



    В табл. 2.6 показано соответствие между значениями трех полей и значением ЧПЗ расширенного формата для х86–архитектуры.

    Таблица 2.6

    Комбинация значений полей

    Значение

    j = 0; 0 < e < 32767

    Не поддерживается

    j = 1; 0 < e < 32767

    (-1)s × 2e-16383

    × 1.f (нормализованное число)

    j = 0; e = 0; f ¹ 0

    (-1)s × 2-16382

    × 0.f (ненормализованное число)

    j = 1; e = 0

    (-1)s × 2-16382

    × 0.f (псевдоненормализованное число)

    j = 0; e = 0; f = 0

    (-1)s × 0.0 (ноль со знаком)

    j = 1; s = 0; e = 32767; f = 0

    +INF (положительная бесконечность)

    j = 1; s = 1; e = 32767; f = 0

    -INF (отрицательная бесконечность)

    j = 1; e = 32767; f ¹ 0

    quiet или signaling NaN

    <


    Мэйнфреймы

    В мэйнфреймах фирмы IBM используемое еще со времен S/360 шестнадцатеричное представление чисел с плавающей запятой – с шестнадцатеричной мантиссой и характеристикой (HFР) – в ESA/390 (мэйнфреймы серии S/390) дополнено двоичным представлением BFP, удовлетворяющим стандарту IEEE 754. Это представление определяет 3 формата данных – короткий, длинный и расширенный–   и 87 новых команд для работы с ними.

    BFP появилось в ESA/390 относительно недавно, в 1998 году. Одновременно было введено 12 дополнительных регистров FR (общее число FR достигло 16). Кроме того, в архитектуре появился управляющий регистр с плавающей запятой и средства сохранения содержания регистров при операции записи состояния. Добавлено еще 8 новых команд, не связанных однозначно с тем или иным представлением данных с плавающей запятой, в том числе 4 – для преобразования между форматами HFP и BFP.

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

    В суперкомпьютерах NEC SX-4 (представленных в 1995 году) целые числа могут быть как 32-, так и 64-разрядными. Для чисел с плавающей запятой применяется стандарт IEEE 754 (как для 32-, так и для 64-разрядных чисел). Кроме того, SX-4 может работать со 128-разрядными числами с плавающей запятой расширенной точности и с форматами чисел с плавающей запятой, используемыми в PVP-системах Cray и мэйнфреймах IBM. При этом производительность SX-4 не зависит от формата представления, а сам этот формат выбирается при компиляции.


    Содержание раздела