
- •Международный стандарт представления чисел с плавающей точкой в эвм
- •Введение
- •Числа с плавающей точкой
- •Машинный эпсилон
- •Точность представления
- •Показатель степени
- •Операции и округление
- •Специальные значения
- •Бесконечность
- •Ноль со знаком
- •Ненормализованные числа
- •7.5. Числа с плавающей точкой (вещественные)
- •7.6. Диапазон представления вещественных чисел
Показатель степени
Показатель степени может принимать как положительные так и отрицательные значения. Это означает, что нужно определить метод представления показателя степени в бинарном виде.
Существует
несколько общепринятых методов. Например,
резервировать один бит на знак, как это
реализовано в представлении мантиссы.
Однако IEEE использует другой метод -
метод
со смещением.
Для одинарного и двойного формата
вводятся смещения - 127 и 1023 соответственно.
Допустим,
-
значение бинарного вида показателя
экспоненты в смысле беззнаковой величины.
Тогда показатель экспоненты определяется
как
для
одинарной точности и как
для
двойной.
Из
таблицы следует, что для одинарного
формата
и
.
Может возникнуть вопрос: почему
?
Это сделано для того, чтобы величина
обратная к минимальному по модулю числу
не
выходила за рамки представимости.
(Однако, при этом величина обратная к
максимальному числу становится
гарантированно меньше минимального
представимого числа. Дело в том, что
переполнение - куда более серьёзная
проблема, чем потеря значимости.)
В
8 бит, выделенные на показатель степени
в одинарном формате, уместится 256
различных значений (от 0 до 255). Это
соответствует диапазону показателей
степени от -127 до 128. Зачем используется
показатель -127 ()
мы уже знаем. Об использовании значения
128 (
)
речь пойдёт в разделе "Специальные
величины".
Операции и округление
В стандарте IEEE основными арифметическими операциями является сложение, вычитание, деление, умножение и извлечение квадратного корня. При вычислении значения выражений применяется чётное округление.
Стандарт IEEE требует, чтобы результаты основных арифметических операций были точно округлены (exactly rounded). Это означает, что сначала должен быть вычислен точный ответ, а потом он должен быть округлён до ближайшего числа с плавающей точкой.
Само понятие округление на самом деле прозрачно — за исключением округления чисел вида 12.5. К какому из чисел 12 и 13 его округлить? Существует два различных подхода к этому вопросу. Первый - разделить множество {0,1,2,3,4,5,6,7,8,9} пополам на {0,1,2,3,4} и {5,6,7,8,9} и первое округлять вниз, а второе — наверх. Второй подход — округлять числа так, чтобы в наименее значащей позиции после округления стояло чётное число. Например, 12.5 округлять в 12, а 10.1235 — в 10.124. Такое округление называется чётным.
В стандарте IEEE используется чётное округление.
Также стандарт IEEE вводит гарантии касательно дополнительных операций - взятия остатка от деления и перевода целых чисел (integer) в числа с плавающей точкой (и наоборот). Результаты этих операций должны быть также точно округлены. В отличие от этих операций нет никаких гарантий по поводу перевода между десятичным и двоичным представлениями. Дело в том, что существуют достаточно эффективные алгоритмы округления всех операций, кроме операции перевода из десятичной формы в двоичную.
Ещё
одним интересным вопросом является
округление значений трансцендентных
функций (Функций, которые не могут быть
выражены конечным числом суперпозиций
стандартных арифметических операций).
Стандарт IEEE не гарантирует точного
округления значений таких функций.
Хорошим примером является округление
значений экспоненты.
.
К какому значению округлять
—
к 5.083 или к 5.084? Для округления сначала
надо получить точное
значение функции. При увеличении точности
,
затем
,
затем
.
Для принятия решения нам нужно определить
чему из
или
равна
.
Понятно, что в случае экспоненты мы не
гарантированно доберёмся до интересующей
нас позиции. Поэтому в случае трансцендентных
функций нет смысла требовать, чтобы
значение было сначала получено с
бесконечной точностью и затем округлено.