Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура компьютеров_1 / 4_Представление информации в компьютере.doc
Скачиваний:
42
Добавлен:
20.03.2015
Размер:
340.48 Кб
Скачать

4.3.1. Стандарт ieee для чисел с плавающей запятой

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

± Х1, Х2, Х3, Х4,X5, Х6, Х7, х 10±Y1 Y2

Здесь Хiи Yi это десятичные цифры. Такого количества значащих цифр (7) и диапазона значений порядка (±99) достаточно для научных расчетов. Мантиссу и порядок из этих диапазонов можно перевести в двоичное представление, уме­щающееся в 32 разряда, то есть в стандартное компьютерное слово. Мантисса длиной 24 бита может представлять десятичное число из 7 цифр, а 8-битовый по­рядок подразумеваемого основания 2 позволяет представить достаточно широ­кий диапазон значений масштабных множителей. Для знака числа необходим один бит. Поскольку ведущий бит нормализованной мантиссы обязательно дол­жен быть равен 1, его можно не включать в представление, за счет чего и освобож­дается один бит для знака. Таким образом, 32 бита позволяют представить доста­точно широкий диапазон чисел с плавающей запятой.

Описанный стандарт представления чисел с плавающей запятой в 32-разряд­ном формате разработан и детально специфицирован Институтом инженеров по электротехнике и электронике (Institute of Electrical and Electronics Engineers, IEEE). В нем определены и представление чисел, и правила выполнения четырех базовых арифметических операций. На рис. 4.4 а продемонстрировано 32-раз­рядное представление чисел с плавающей запятой. Знак числа задается в первом разряде, за ним следует представление порядка (по основанию 2). Вместо числа со знаком в поле порядка E хранится целое число без знака E' = E + 127. Этот формат называется форматом, с избытком 127. Таким образом, E' входит в диапа­зон 0≤Е’≤255. Граничные значения указанного диапазона, 0 и 255, употребляют­ся для представления описанных ниже специальных значений. Для обычных (нормальных) значений E' лежит в пределах 1≤ E’≤254. Это означает, что реаль­ный порядок, E, находится в диапазоне -126 ≤ E ≤ 127. Представление порядка в формате с избытком х упрощает, сравнение относительного размера двух чисел с плавающей запятой.

Последние 23 разряда числа представляют мантиссу. Поскольку числа зада­ются в нормализованном виде, старший бит мантиссы всегда равен 1. Этот бит не указывается явно; подразумевается, что он располагается слева от двоичной запя­той. Таким образом, 23 бита в поле M соответствуют дробной части мантиссы, то есть разрядам справа от двоичной запятой. Пример числа с плавающей запятой одинарной точности приведен на рис. 4.4, б.

Стандартное 32-разрядное представление (рис. 4.4, а) называется представле­нием с одинарной точностью, поскольку занимает одно 32-разрядное слово. Оно позволяет представлять масштабные множители в диапазоне от 2-126 до 2+127, что приблизительно равно 10±38. Значение 24-разрядной мантиссы обеспечивает при­мерно ту же точность, что и семизначное десятичное значение. Для достижения большей точности и увеличения диапазона чисел с плавающей запятой стандарт IEEE определяет формат двойной точности (рис. 4.4, в). В нем расширены диа­пазоны значений мантиссы и порядка. Так, 11-разрядный порядок в формате с избытком 1023 E лежит в диапазоне 1 Е' ≤ 2046 для обычных значений, а значе­ния 0 и 2047 употребляются для представления специальных символов. Следова­тельно, действительный порядок E лежит в диапазоне -1022 E 1023, позво­ляющем представить масштабные множители от 2-1022 до 21023 (то есть приблизи­тельно 10±308). Значения 53-разрядной мантиссы обеспечивают практически ту же точность, что и 16 десятичных цифр.

Чтобы компьютер соответствовал стандарту IEEE, он должен поддерживать как минимум представление чисел с плавающей запятой одинарной точности. Представление двойной точности необязательно. Этот стандарт определяет еще несколько необязательных расширенных версий обоих форматов. Они предна­значены для повышения точности и порядка представления промежуточных ре­зультатов последовательных вычислений. Например, внутреннее произведение двух векторов можно вычислить путем накопления суммы произведений с рас­ширенной точностью. Входные значения имеют стандартную точность, одинар­ную или двойную; результат округляется до той же точности. Благодаря расши­ренным форматам можно сократить погрешность округления, которая накапли­вается при многократных однотипных вычислениях. Кроме того, расширенные форматы повышают точность вычисления таких элементарных функций, как си­нус, косинус и т. п. Наряду с четырьмя базовыми арифметическими операциями стандарт IEEE определяет операции вычисления остатка от деления, квадратного корня, преобразования из двоичного кода в десятичный и наоборот.

Знак 8-разрядный 23-разрядная дробная

числа порядок со знаком часть мантиссы

в формате

с избытком 127

Представленное значение = ±l.M х 2E’-127

а

Представленное значение = 1,001010 ... 0 х 2-87

б

Знак 11-разрядный 52-разрядная

Числа порядок в формате дробная часть мантиссы

с избытком 1023

Представленное значение = ±l.М х 2Е’-1023

в

Рис. 4.4. Представления чисел с плавающей запятой, определенные в стандарте IEEE: формат числа с одинарной точностью (а); пример числа с одинарной точностью (б); формат числа с двойной точностью (в)

Порядок в формате с избытком 127

(Слева от двоичной запятой нет явно заданной 1)

Представленное значение = +0,0010110... х 29

а

Представленное значение = +1,0110... х 26

б

Рис. 4.5. Число с плавающей запятой в формате IEEE одинарной точности:

ненормализованное (а); нормализованное (б)

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

Во-первых, если число не нормализовано, его всегда можно привести к нормальной форме, сдвинув дробную часть и соответст­вующим образом изменив порядок. На рис. 4.5 вы видите ненормализованное значение 0,0010110... х 29 и его нормализованное представление 1,0110... х 26. По­скольку масштабный множитель представлен в формате 2i, сдвиг мантиссы на один разряд вправо или влево компенсируется увеличением или уменьшением порядка на единицу.

Во-вторых, в ходе вычислений может быть сгенерировано число, выходящее за рамки диапазона нормальных чисел. Если точность одинар­ная, это означает, что для представления нормализованного числа потребуется по­рядок менее -126 или более +127. В первом случае говорят о потере значимости или отрицательном переполнении (underflow), а во втором — о переполнении (overflow). И потеря значимости, и переполнение являются арифметическими исключениями, о которых мы поговорим чуть позже.

Специальные значения

Граничные значения 0 и 255 порядка Е' формате с избытком 127 используются для представления специальных значений. Если E' = 0 и дробная часть мантиссы M равна нулю, значит, представлено точное значение 0. Порядок E' = 255 и ман­тисса M = 0 представляют значение ∞, где ∞ — результат деления нормального числа на нуль. Для представления этих значений обычно применяется и знако­вый разряд, например: ±0 и ±∞.

Значения Е' = 0 и М ≠ 0 соответствуют представлению анормальных чисел. Это числа ±0,М х 2-126, которые меньше самого маленького числа. У них отсутствует подразумеваемая единица слева от двоичной запятой, a M представляет собой любую ненулевую 23-разрядную дробную часть числа. Анормальные числа пред­назначены для случаев, когда возможна постепенная потеря значимости; они расширяют диапазон представляемых чисел и могут быть полезны при работе с очень маленькими числами. Когда E'=255 и M ≠ 0, представленное значение на­зывается Not a Number (NaN). Значение NaN является результатом выполнения недопустимой операции, такой как 0/0 или √-1.

Исключения

Согласно стандарту IEEE, если в ходе работы произойдет потеря значимости, пере­полнение или деление на нуль, встретится условие inexact либо invalid, процессор должен установить флаг исключения. О первых трех условиях исключений мы уже упоминали. Inexact это ситуация, когда для представления результата в одном из нормальных форматов его необходимо округлить. Термин invalid употребляется для описания ситуации, когда предпринимается попытка выполнения недопусти­мой операции, такой как 0/0 или √-1. При возникновении одной из указанных ис­ключительных ситуаций результату присваивается специальное значение.

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