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

5.1 Особенности представления числовых данных с плавающей точкой

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

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.1)

где M — мантисса;

P — порядок.

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

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.2)

где M — мантисса.

Знак мантиссы определяет знак всего числа.

Порядок определяет фактическое положение запятой вместо положения, которое она занимает в изображении мантиссы, и может быть положительным или отрицательным, но обязательно целым числом. Понятие «ПЗ» можно рассматривать как перемещение запятой в изображении числа влево, если Р<0, или вправо, если P>0. Для обозначения чисел с плавающей точкой используют форму вида:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.3)

где М – мантисса числа;

Е – разделитель мантиссы и порядка;

Р – порядок числа.

Вместо E могут использоваться другие символы, например, D (double — двойная точность), когда для мантиссы отводится большее количество разрядов. Если для записи порядка используется (Р) разрядов, а для записи мантиссы (М) разрядов, то в форме с плавающей точкой может быть представлено следующее максимальное (по абсолютной величине) число:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru (5.4)

В свою очередь, минимальное по абсолютной величине, но не равное нулю, число в форме с плавающей точкой может быть представлено в виде:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru (5.5)

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

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru (5.6)

Для чисел с плавающей точкой:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru (5.7)

Из рассмотренного следует, что диапазон представления чисел в форме с плавающей точкой зависит от разрядности порядка. Увеличение разрядности порядка на (1) значительно расширяет диапазон (таблица 5.1).

Таблица 5.1- Зависимость диапазона представимых чисел от разрядности порядка

P выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru
выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru
выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru
выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru

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

5.2 Форматы двоичных числовых данных с плавающей точкой

Формат данных с плавающей точкой, использовавшийся в компьютерных системах первых поколений, включал четыре поля, а именно: указанные ранее поля для мантиссы и ее знака (длиной (m+1) разряд), а также два дополнительных поля для порядка и его знака (длиной (p+1) разряд).

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru

Рисунок 5.1 — Классический формат данных с плавающей точкой

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

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

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

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.8)

где выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru — некоторая константа (смещение).

Если Рх > Рy, то Ex > Ey. Если (D = 2p-1), то такой смещенный код называют кодом с положительным нулем. Для перехода от смещенного кода к дополнительному достаточно проинвертировать знаковый бит.

Широко применяются смещенные коды с отрицательным нулем, когда

(D = 2p-1 - 1). При сложении и вычитании смещенных порядков результирующий порядок также должен быть смещенным.

При использовании смещенных кодов с отрицательным нулем сложение порядков выполняется в соответствии с правилом:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru , (5.9)

где Еy - смещенный порядок с инвертированным старшим разрядом.

В этом случае может возникать как положительное, так и отрицательное переполнение. Если во втором слагаемом старший разряд (1) был инвертирован в (0), а при сложении возник перенос (CY=1), то имеет место переполнение порядка. Результат оказывается за пределами представления. Признаком получения отрицательного переполнения (антипереполнение) является отсутствие переноса (CY=0) из старшего разряда суммы при условии, что во втором слагаемом старший разряд из (0) был инвертирован в (1).

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

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru , (5.10)

где Еy - инверсное значение смещенного порядка с инвертированным старшим разрядом.

5.3 Стандарт IEEE-754

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

Поэтому был разработан международный стандарт IEEE-754, нормам которого должны удовлетворять практически все вновь разрабатываемые компьютерные системы. Указанный стандарт решает следующие задачи:

- упорядочивает форматы чисел с плавающей точкой;

- унифицирует реакции на особые случаи в процессе обработки;

- определяет требования к точности вычислений.

В соответствии со стандартом IEEE-754 определены два базовых и два расширенных формата. Во всех форматах используется смещенный код порядка. Мантисса имеет старший разряд (m0) с весом (20), относящийся к целой части. Поэтому условие нормализации изменяется:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.11)

Базовый одинарный формат - (БОФ) имеет длину в 32 разряда. Поле порядка в этом формате содержит 8 разрядов, а смещение равно 127.

Максимальный положительный порядок числа здесь равен +127, минимальный отрицательный -128.

Базовый двойной формат - (БДФ) имеет одноразрядное знаковое поле, 11-разрядное поле смещенного порядка и 52-разрядное поле мантиссы.

Смещение здесь равно 1023. Особенность двух указанных форматов заключается в том, что минимальный и максимальный смещенные порядки зарезервированы для представления специальных чисел. Поля мантисс в явном виде не содержат разряда (m0), так как в памяти должны храниться нормализованные мантиссы чисел, а значит, их старший разряд всегда равен (1). При передаче числа из памяти в процессор этот «неявный» разряд становится «явным», и в операциях участвует 24-разрядная (БОФ) или 56-разрядная (БДФ) мантисса.

Расширенный одинарный формат - (РОФ) не имеет жестко фиксированных параметров, однако для конкретных реализаций он устанавливается, исходя из следующих требований:

- наличие одноразрядного знакового поля;

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

- длина мантиссы не менее 31 разряда;

- диапазон значений порядка — -1023... +1024.

Расширенный двойной формат - (РДФ) отличается от одинарного тем, что диапазон порядка составляет -16383...+16384, а поле мантиссы - не менее 63 разрядов. В качестве примера практической реализации форматов стандарта IEEE-754 можно рассмотреть представление числовых данных с плавающей точкой в компьютерных системах. Здесь используются данные трех типов (таблица 5.2):

- вещественные числа одинарной точности (single real), соответствующие БОФ;

- вещественные числа двойной точности (double real), соответствующие БДФ;

- вещественные числа расширенной точности (extended real) или временные вещественные числа, соответствующие РДФ.

Временные вещественные числа имеют в своем представлении явный бит (m0). В памяти компьютера числа хранятся чаще всего в форматах БОФ или БДФ, а их обработка выполняется в РДФ.

Следует отметить, что целые числа в диапазоне (2-64….2+64 ) представляются абсолютно точно в РДФ.

Таблица 5.2 - Зависимость диапазона представимых чисел от базовых форматов

Тип Длина Точность Диапазон (дв.) Диапазон (дес.)
БОФ выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru
БДФ выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru
РДФ выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru

Если в процессе вычислений результат выходит за пределы представимых чисел, то имеет место особый случай:

- нарушение нормализации;

- если результат превышает |Xmax|, то такой случай называют переполнением или переполнением порядка, и вычисления при этом останавливают (прерывание);

- если результат меньше |Xmin|, имеет место антипереполнение или исчезновение порядка, что обычно воспринимается как нулевой результат (машинный 0);

- в результате выполнения сложения-вычитания мантисса может оказаться равной (0) при ненулевом порядке. Это ситуация потери значимости (псевдонуль). Результат интерпретируется как машинный (0).

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

Пусть требуется выполнить некоторую арифметическую операцию над операндами X и Y в форме с плавающей точкой:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.12)

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.13)

Результатом операции будет число:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.14)

Порядки чисел X и Y представлены p разрядами, а мантиссы – (m-разрядные) правильные дроби, то есть,

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru , выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.15)

5.5 Сложение и вычитание чисел в форме с плавающей точкой

Представим операцию сложения в виде:

Z = X + Y. (5.16)

Пусть Рх > Py, тогда:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.17)

где выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru .

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.18)

где выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru ; выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru .

Операция сложения и вычитания операндов в форме с плавающей точкой включает следующие этапы:

- выравнивание порядков операндов и определение порядка результата;

- сложение и вычитание мантисс;

- нормализация результата;

- округление результата.

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

- сформировать разность порядков выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru .

- если D>0, то сдвинуть на один разряд вправо мантиссу (Y) и вычесть единицу из разности порядков( D); если D<0, то сдвинуть на один разряд вправо мантиссу (X) и прибавить единицу к разности порядков (D);

- пункт 2 алгоритма повторять до тех пор, пока выполняется неравенство D≠0; при D=0 выравнивание порядков считают законченным.

Так как порядки операндов могут иметь разные знаки, то для представления их разности (D) может понадобиться (p+1) разряд. Абсолютная величина (D) может превышать число разрядов (m), отводимых для представления мантисс. В этом случае все разряды сдвигаемой вправо мантиссы выходят за пределы разрядной сетки и далее, при сложении и вычитании мантисс, абсолютная величина мантиссы, которая оставалась неподвижной, не меняется. Следовательно, при выполнении условия |D|>m можно прекратить выравнивание порядков и присвоить окончательному результату значение операнда, мантисса которого не сдвигалась.

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

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

Поскольку при выравнивании порядков возможна потеря части разрядов мантиссы одного из операндов, то мантисса результата может быть получена с погрешностью, по абсолютной величине почти равной единице младшего разряда. Однако среднее значение погрешности при этом равно нулю, если считать, что знаки "+" и "-" операндов и заданных операций появляются с равными вероятностями. С целью уменьшения максимальной абсолютной величины этой погрешности может быть введена операция округления мантиссы результата.

Необходимость нормализации результата обусловлена тем, что при мантиссах операндов, удовлетворяющих условиям нормализации, в зависимости от знака операции, мантисса результата может находиться в пределах 0≤|z|<2.

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

- если 1≤|z|<2 (нормализация нарушена влево), то сдвинуть мантиссу результата на один разряд вправо и прибавить единицу к порядку результата.

При этом может возникнуть переполнение порядков.

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

Если 0<|z|<1/2, то сдвинуть мантиссу влево и вычесть единицу из порядка результата. Эти действия продолжать до тех пор, пока сохраняются условия указанного выше неравенства (если мантисса результата представлена прямым кодом, то до тех пор, пока в старшем разряде мантиссы в результате сдвига появится единица). В этом случае может возникнуть антипереполнение.

Если |z|=0, то результату присваивается машинный нуль (потеря значимости), а выполнять нормализацию нет необходимости.

При использовании модифицированного дополнительного кода для вычитания левое нарушение нормализации обнаруживается так же, как и в предыдущем случае, а правое нарушение — по комбинациям 00,0... и 11,11... .

5.6 Умножение и деление чисел в форме с плавающей точкой

Представим операцию умножения в виде:

Z = X · Y. (5.19)

тогда:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.20)

где: выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru ; выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru .

Знак произведения определяют путем суммирования по модулю 2 цифр в знаковых разрядах сомножителей: выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru .

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

Представим операцию деления в виде:

Z = X/Y. (5.21)

Следует помнить, что при делении чисел с плавающей точкой остатка не бывает:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru (5.22)

где: выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru ; выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru .

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

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

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

Общий алгоритм выполнения операций умножения и деления:

- определение знака результата;

- сложение и вычитание порядков;

- умножение и деление мантисс;

- нормализация результата;

- округление результата.

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

Пусть( хm) - младшая цифра мантиссы результата до округления, (х'm) - та же цифра после округления, (xm+1) - цифра мантиссы, выходящая за пределы разрядной сетки при округлении, (d) - погрешность округления. Тогда все возможные ситуации при округлении иллюстрируются табл. 11.4, из которой видно, что при таком округлении погрешность абсолютной величины мантиссы результата будет равна 0 или ±1/2 веса младшего разряда, а ее среднее значение равно нулю.

Таблица 5.3 – Результаты округления мантиссы результата

xm xm+1 x’m d
+(1/2)2-m
-(1/2)2-m

5.7 Алгоритмы выполнения операций над числами в форме с плавающей точкой, в представлении IEEE-754

Вещественное число может быть представлено в каком-либо формате стандарта IEEE-754 следующим образом:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.23)

С учетом условия нормализации ( выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru ), минимальные и максимальные абсолютные значения мантисс:

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.24)

выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru . (5.25)

Сложение, вычитание, умножение и деление вещественных чисел в формате IEEE-754 осуществляется в соответствии с рассмотренными ранее алгоритмами. Поскольку в форматах хранятся не истинные значения порядков, а смещенные коды порядков, имеют место некоторые особенности, связанные с выполнением операций над смещенными порядками. Кроме того, должен учитываться факт наличия бита ( выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru ) мантиссы.

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

При умножении смещенный порядок произведения определяется в соответствии с рассмотренными выше правилами. Мантисса произведения может иметь нарушение нормализации.

Проанализируем различные ситуации:

1. выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru .

Нет нарушения нормализации.

2. выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru

Нет нарушения нормализации.

3. выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru .

Здесь имеет место нарушение нормализации влево на 1 разряд.

При делении смещенный порядок частного определяется в соответствии с рассмотренными выше правилами. Мантисса частного может иметь нарушение нормализации. Проанализируем различные ситуации:

1. выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru .

Нет нарушения нормализации.

2. выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru ; 0,5<Z<1

Нарушение нормализации вправо на 1 разряд.

3. выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru ; 1<Z<2

Нет нарушения нормализации.

4. выполнение арифметических операций в компьютерных системах над числами с плавающей точкой - student2.ru .

Нет нарушения нормализации.

Наши рекомендации