Формат чисел с плавающей запятой

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

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 7e 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 2b 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 7e 0 1. f 30 f 0
  "спрятанный бит" двоичная точка

Пример представления чисел в формате с плавающей точкой «одинарной» точности:

Итак, для представления нулевого значения в ПЗ-формате мантисса должна быть денормализованной. Однако, если использовать денормализованную мантиссу только для представления нуля, малые по модулю числа, представимые в данном формате, оказываются расположенными неравномерно – вокруг нуля появляется "мертвая" зона, размер которой существенно превышает расстояние между ближайшими к нулю представимыми числами. Чтобы решить эту проблему и сделать расположение представимых чисел вблизи нуля равномерным, применяют следующее соглашение о денормализации: если все разряды порядка имеют нулевое значение, то величина порядка увеличивается на единицу, а мантисса считается денормализованной, то есть содержащей в старшем спрятанном разряде не единицу, а нуль. Это позволяет расширить диапазон представления малых по модулю чисел. Фактически в данном случае диапазон возможных отрицательных порядков увеличивается за счет сокращения числа значащих цифр мантиссы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: