Введение

Рубрика:  Арифметика с плавающей запятойIEEE-754Основы

Даются базовые определения и договорённости, необходимые для дальнейшего описания формата двоичных чисел по стандарту IEEE-754.

Многие прикладные научные расчёты могут быть выполнены в пределах некоторой погрешности, а потому абсолютно точное значение тех или иных величин иметь не обязательно. Так, например, вряд ли строитель будет проверять диагональ квадратного фундамента со стороной $a$ на равенство её величине $a\sqrt2$, ему достаточно убедиться, что она получилась примерно $1{,}4a$. В каких-то сферах требуется более высокая точность, в каких-то других — менее, но общий смысл один и тот же: необходимо знать лишь несколько первых цифр числа и порядок величины. Скажем, 5 км — это 5,0×103 м. Порядок величины 3 определяет своего рода характер числа (тысячи метров). Так, разговаривая о расстояниях в молекулярной физике, мы оперируем порядками −9, −10 и даже меньше, а при расчётах межпланетных полётов порядки уже могут достигать +9, +10 и даже больше.

От того, сколько первых цифр числа мы знаем, зависит то, насколько точны наши вычисления. В одних случаях важна высокая точность до десяти и более десятичных цифр, в других устраивает грубое округление до двух-трёх цифр и меньше.

Для хранения таких приближённых величин широко используется формат чисел с плавающей запятой. Числа в таком формате имеют вид

$$z=m\times \beta^e,$$

где $m$мантисса, $\beta$основание, а $e$порядок числа (экспонента).

Величина мантиссы отвечает за точность числа, а порядок, соответственно, отвечает за то, насколько велико или мало это число. Как правило, $\beta \geq 2$ и является целым, а мантисса и экспонента записываются в системе счисления с основанием $\beta$, хотя и не обязательно. Более подробно с подобной записью числа и её особенностями можно познакомиться в статье «Научная запись числа». Дальнейшее изложение материла выполнено с учётом того, что содержание указанной статьи читателю полностью понятно.

Поскольку большинство современных компьютеров работают в двоичной системе счисления, основание $\beta$ удобно полагать равным 2. Однако это не единственная причина выбора такого основания. Доказано, что основание $\beta=2$ минимизирует среднюю ошибку округления среди других систем счисления. Тем не менее, в ряде случаев используется $\beta=10$, но рассмотрение этих случаев выходит за пределы данного цикла, посвящённого только двоичным числам. С этого момента по умолчанию считаем $\beta=2$, если не оговорено иное.

Двоичные числа с плавающей запятой

Итак, любое число z можно представить в двоичной нотации с плавающей запятой

$$z=m\times 2^e.$$

Для того чтобы избежать неоднозначности, будем считать, что наши числа имеют нормализованный научный вид, то есть $1\leq|m|<2$. Как уже было сказано, подробности и важные замечания о таком представлении читайте в статье «Научная запись числа».

Таким образом, все наши числа, кроме нуля, будут иметь вид 1,xxx…×2e. Впрочем, это ограничение мы будем вынуждены нарушить, когда разговор пойдёт о «денормализованных» числах, но пока забудьте про это слово.

Число 0 в указанном виде представить нельзя, поэтому мы выделим его в отдельную категорию и будем считать особым числом. Позже мы познакомимся и с другими особыми числами.

Сейчас мы пока не будем обсуждать алгоритм того, как, например, получить из числа 3,14 его двоичную научную запись 1,100100011110…×21, но предположим, что мы каким-то образом умеем это делать. Более подробно алгоритмы подобных преобразований будут изложены позже. Кстати, из этого примера видно, почему такая запись называется числом с плавающей запятой: запятая действительно «плавает» между цифрами так, чтобы встать между первой значащей цифрой и последующими.

В предложенном выше примере нам необходимо иметь бесконечное количество значащих цифр, чтобы записать двоичное представление числа 3,14, а во многих других прикладных расчётах количество цифр если и не бесконечно, то всё же может быть очень большим. Однако память любой вычислительной системы ограничена, поэтому мы не можем сохранять сколько угодно значащих цифр в мантиссе и не можем выбрать сколь угодно большой или маленький порядок числа. Таким образом, нам придётся ввести ограничения. Давайте считать, что мантисса содержит не более p двоичных цифр, а экспонента находится в некотором заранее определённом диапазоне $e_{min}\leq e \leq e_{max}$.

Давайте сконструируем наглядный пример, который будем использовать на протяжении этой и нескольких последующих статей. Пусть p=3, $e_{min}=-1$ и $e_{max}=2$. Таким образом, все возможные числа, которые мы могли бы записать при таких ограничениях, расположены на следующей числовой оси (показана только неотрицательная полуось):

Первое положительное число, которое представимо в нормализованной научной нотации при указанных ограничениях, это число 1,00×2−1=0,5. Оно обозначено слева на картинке в виде длинной риски над пометкой «0,5». Следом за ним идут 3 коротких риски, соответствующие числам 1,01×2−1=0,625, 1,10×2−1=0,75 и 1,11×2−1=0,875. Эти числа делят интервал между 0,5 и 1 на 4 равные части с шагом 0,125. Далее, когда e=0, минимальное число с такой экспонентой будет равно 1,00×20=1. Следом за ним идут три числа, отстоящие друг от друга на величину 0,25 и разделяющие отрезок между 1 и 2 на 4 равные части. Затем точно также идут числа 2 (e=1) и 4 (e=2), после каждого из которых с равным шагом расположены промежуточные числа. Число 0, как уже было сказано, является специальным числом.

Обратите, пожалуйста, внимание на большую пропасть, образовавшуюся между 0 и 0,5. Об этой «яме» мы ещё поговорим позже.

Как мы видим, с увеличением чисел постепенно увеличивается и шаг, с которым они следуют друг за другом. Увеличение экспоненты на 1 вдвое увеличивает шаг (переход к следующей экспоненте обозначен длинной риской на рисунке), но в пределах одного и того же значения экспоненты шаг одинаковый (короткие риски).

Если увеличить точность p, то мы тем самым увеличим число коротких рисок, то есть получим более точное разбиение интервала для каждого значения e. Например, если положить p=4, то рисунок станет таким:

Если же увеличить диапазон $[e_{min},e_{max}]$, то мы не затронем качество разбиения больших интервалов, а лишь увеличим число этих интервалов. То есть если, например, оставить p=3, но положить $e_{max}=3$, то получим расширение интервала чисел новыми значениями от 8 до 14 с шагом 2:

Теперь мы знаем о том, как на числовой оси расположены нормализованные двоичные числа с плавающей запятой при наложенных ограничениях на точность и порядок чисел. Именно так нормализованные числа представлены в формате IEEE-754, о чём мы узнаем позже.