Добавил:
Закончил бакалавриат по специальности 11.03.01 Радиотехника в МИЭТе. Могу помочь с выполнением курсовых и БДЗ по проектированию приемо-передающих устройств и проектированию печатных плат. Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
31
Добавлен:
10.09.2023
Размер:
909.82 Кб
Скачать

Формат с фиксированной запятой

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

Часто формат с фиксированной запятой обозначают парой целых чисел: M.N. В большинстве случаев (об одном из исключений будет сказано далее) М обо­значает число разрядов целой части числа (включая знак), а N - число разрядов дробной части. Этот способ обозначения широко распространен в литературе по цифровой обработке сигналов.

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

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

Числа в формате с плавающей запятой (иногда его называют ещё экспоненциальным форматом или научной нотацией) представляются в виде , где - мантисса (mantissa), a - порядок (exponent). Обычно мантисса пред­ставляется в формате с фиксированной запятой, а порядок является целым чис­лом.

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

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

Нормализация мантиссы позволяет сэкономить один разряд в ее двоичном пред­ставлении. Действительно, если нормализованная мантисса лежит в диапазоне [0,5;1], то ее двоичная запись имеет вид «0,1...», а если для нормализации ис­пользуется диапазон [1, 2], двоичная запись будет выглядеть как «1,...». В обоих случаях заранее известно, что первый значащий разряд равен единице, поэтому его можно не хранить. Иногда это называется использованием неявного старше­го бита.

Для представления отрицательных чисел необходимо обеспечить возможность представления отрицательных значений мантиссы. Как правило, для этого ис­пользуется прямой код (см. ранее раздел «Представление отрицательных чи­сел»), то есть модуль мантиссы и знаковый бит хранятся независимо.

Использование строго нормализованной мантиссы делает невозможным пред­ставление нулевого значения в формате с плавающей запятой. Поэтому исполь­зуется специальное соглашение о том, что число, содержащее нули во всех раз­рядах мантиссы и порядка, считается нулем. Знаковый разряд при этом может иметь любое значение. Таким образом, имеется два представления нуля — «по­ложительный нуль» и «отрицательный нуль».

Об этом уже говорилось ранее В разделе «Представление отрицательных чисел».

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

ЗАМЕЧАНИЕ _____________________________________________________________

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

Итак, для представления нулевого значения в формате с плавающей запятой мантисса неминуемо должна быть денормализованной. Однако если использовать денормализованную мантиссу только для представления нуля, малые по модулю числа, представимые в данном формате, оказываются расположены неравномерно — вокруг нуля появляется «мертвая зона», размер которой существенно превышает расстояние между ближайшими к нулю представимыми числами.

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

Поясним сказанное на примере, рассмотрев 6-битовый формат с плавающей за­пятой, в котором отведено 2 бита для хранения порядка и 3 - для хранения ман­тиссы. Биты двоичного представления числа, таким образом, имеют следующее назначение: seemmm

Здесь - знаковый бит, - биты порядка, - биты мантиссы. Рассчитаем и по­кажем на графике (рис.16.1) все числа, которые можно представить в данном формате без использования и с использованием денормализации мантиссы для малых чисел.

Рис.16.1. Числа, представимые в 6-битовом формате с плавающей запятой

без использования (сверху) и с использованием (снизу) соглашения

о денормализации мантиссы для малых чисел

Соответствующие вычисления можно осуществить с помощью следующей MATLAВ- программы:

% первый вариант денормализация только для нуля

for k = 0:63 % перебор всех возможных представлений

s = 1 - 2 * bitget(k, 6); % знаковый множитель

e = bi2de(bitget(k, 4:5))-1; % порядок

m = 1 + bitand(k, 7) / 8; % мантисса

if 0==bitand(k, 31) % нуль - особый случай

f(k+1)=0;

else

f(k+1)=s*m*(2^e);

end

end

subplot(2, 1, 1)

title('денормализация только для нуля');

plot(f, f*0, '.')

% второй вариант - денормализация для малых по модулю чисел for k = 0:63

for k=0:63 % перебор всех возможных представлений

s = 1 - 2 * bitget(k, 6); % знаковый множитель

e = bi2de(bitget(k, 4:5)); % смещенный порядок

if e == e-1 % истинный порядок

m = 1 + bitand(k, 7) / 8; % нормализованная мантисса

else % нули в поле порядка - не нормализуем мантиссу

m = bitand (k, 7) / 8; % денормализованная мантисса

end

f(k+1)=s*m*(2^e);

end

subplot(2, 1, 2)

title('денормализация для малых по модулю чисел');

plot(f, f*0, '.')

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

ЗАМЕЧАНИЕ _____________________________________________________________

В приведенном листинге использованы следующие функции MATLAB: bitget - возвра­щает биты с- заданными номерами на двоичного представления целого неотрицательного числа; bitand выполняет побитовую логическую операцию «И» над неотрицательными целыми числами; bi2de - преобразует вектор, состоящий из нулей и единиц, трактуя его как запись числа и двоичной системе счисления.

В заключение данного раздела приведем сведения о форматах c плавающей за­пятой, поддерживаемых процессорами персональных компьютеров:

  • формат с одинарной точностью (single в языке Pascal, float в языке С) — 32 бита, включающие знаковый разряд, 8 бит порядка и 23 бита мантиссы;

  • формат с двойной точностью (double в языках Pascal и С) — 64 бита, включающие знаковый разряд, 11 бит порядка и 52 бита мантиссы. Это основной формат хранения данных в MATLAB;

  • формат с расширенной точностью (extended в языке Pascal, long double в языке С) - 80 бит, включающих знаковый разряд, 15 бит порядка и 64 бита ман­тиссы. В отличие от двух предыдущих форматов, здесь не используется неяв­ный старший бит мантиссы.

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

Соседние файлы в папке 7