Число с плавающей запятой представляется в виде
x = f * 2 e,
где f – мантисса, а e – порядок (экспонента). Обычно мантисса представляется в формате с фиксированной запятой, а порядок является целым числом.
Поскольку в экспоненциональной форме записи числа присутствуют два параметра, такое представление оказывается неоднозначным, например:
2 = 2 * 20 = 1* 21 = ½ * 22 = …
Чтобы устранить эту неоднозначность, принято ограничивать диапазон допустимых значений мантиссы 1 £ f £ 2. Процедура приведения мантиссы к допустимому диапазону называется нормализацией, а экспоненциальная запись числа, удовлетворяющая указанным ограничениям, – нормализованной экспоненциальной формой.
Нормализация мантиссы позволяет сэкономить один разряд в ее двоичном представлении. Действительно, если для нормализации используется диапазон [1,2[, двоичная запись мантиссы всегда будет выглядеть, как 1,… То есть заранее известно, что первый значащий разряд равен единице, поэтому его можно не хранить. Это называется использованием неявного (спрятанного) старшего бита.
|
|
Согласно стандарту IEEE-754/854 32-разрядное число с плавающей точкой представляется в следующем формате:
30 23 | 22 0 | |
s | e 7 … e 0 | 1. f 22 f 0 |
"спрятанный бит" | двоичная точка |
Число одинарной точности в формате с плавающей запятой состоит из знакового бита s, 24-битового поля мантиссы (f 22- f 0) и 8-битовой беззнаковой смещенной[5] двоичной экспоненты (e 7- e 0). Предполагается, что мантисса состоит из 23-битовой части и "спрятанного" бита, предшествующего биту f 22 и равного единице. Значение беззнаковой двоичной экспоненты e находится в диапазоне от 1 до 254 и получается путем прибавления к несмещенной двоичной экспоненте числа +127 (при вычислении несмещенной двоичной экспоненты, естественно, необходимо вычесть это же число из смещенной экспоненты число).
32-разрядное число с плавающей точкой можно представить в виде:
n = m * 2 e -128,
а число в формате IEEE-754/854 можно записать в виде:
n = (-1) s * 2 e -127(1. b 0 b 1 b 2… b 23).
Использование строго нормализованной мантиссы делает невозможным представление нулевого значения в ПЗ-формате. Поэтому используется специальное соглашение о том, что число, содержащее нули во всех разрядах мантиссы и порядка, считается нулем. Поэтому стандарт IEEE в формате чисел с плавающей запятой одинарной точности определяет некоторые "особые" типы данных, используемые для сигнализации о переполнении, потере значимости и т.п. Типы данных в ПЗ-формате с одинарной точности приведены в табл.3.1.
Табл. 3.1
Тип | Экспонента | Мантисса | Значение |
NAN | ¹ 0 | неопределено | |
Infinity | = 0 | (-1)s * ¥ | |
Normal | 1 £ e £ 254 | любая | (-1)s * (1. f 22-0)2 e -127 |
Zero | (-1)s * 0 |
Для повышения точности представления мантиссы числа в ЦСП фирмы Analog Devices реализована поддержка 40-разрядных чисел с плавающей точкой расширенной точности. Они представляются в следующем формате:
|
|
38 31 | 30 0 | |
s | e 7 … e 0 | 1. f 30 f 0 |
"спрятанный бит" | двоичная точка |
Пример представления чисел в формате с плавающей точкой «одинарной» точности:
Итак, для представления нулевого значения в ПЗ-формате мантисса должна быть денормализованной. Однако, если использовать денормализованную мантиссу только для представления нуля, малые по модулю числа, представимые в данном формате, оказываются расположенными неравномерно – вокруг нуля появляется "мертвая" зона, размер которой существенно превышает расстояние между ближайшими к нулю представимыми числами. Чтобы решить эту проблему и сделать расположение представимых чисел вблизи нуля равномерным, применяют следующее соглашение о денормализации: если все разряды порядка имеют нулевое значение, то величина порядка увеличивается на единицу, а мантисса считается денормализованной, то есть содержащей в старшем спрятанном разряде не единицу, а нуль. Это позволяет расширить диапазон представления малых по модулю чисел. Фактически в данном случае диапазон возможных отрицательных порядков увеличивается за счет сокращения числа значащих цифр мантиссы.