5. Форматы
Перевод выполнил Пехотин Е.В.
Источник: DRAFT Standard for Floating-Point Arithmetic P754, с. 17-19 // IEEE
5.1 Обзор: форматы и соответствия
В этом разделе определяется несколько видов стандартов на числа с плавающей точкой, задаваемых в двоичной и десятичной системе счисления. Все определяемые данным стандартом форматы имеют фиксированное значение размера для представления рациональных чисел. Значения точности и диапазона этих форматов определяются, исходя из текста программы и соответствующего представления, и обычно задаются так, чтобы все участники использовали один и тот же размер для хранения чисел.
Определяемые данным стандартом форматы могут быть как предназначенными для обмена (обменными), так и не предназначенными для обмена (необменными):
- обменными являются форматы представления, описываемые в данном стандарте. Они являются общедоступными для хранения и межплатформенного обмена. Используемые в данном стандарте имена форматов редко используются в средах программирования. Определяемые данным стандартом обменные форматы бывают базовыми и хранимыми:
- базовые обменные форматы пригодны для арифметических операций. Данным стандартом описывается три базовых двоичных формата длиною 32, 64 и 128 бит соответственно, и два базовых десятичных формата длиною 64 и 128 бит. Среда программирования соответствует данному стандарту в заданной системе счисления при условии, что в ней реализован один или несколько вышеуказанных форматов для данной системы счисления. Выбор этих форматов целиком зависит от языка программирования, если же соответствующий языковой стандарт не регламентирует такие числа либо отличается от фактической реализации языка, выбор будет зависеть от реализации. Целиком соответствующая данному стандарту реализация базового формата обязана:
- хранимые форматы по существу представляют собою сжатые обменные. Стандартом определяется один двоичный формат хранения чисел с плавающей точкой длиною 16 бит и один десятичный формат хранения чисел с плавающей точкой длиною 32 бита. Для поддержки хранимого формата данный стандарт требует только одного – чтобы была реализована возможность преобразования между хранимым форматом и всеми остальными поддерживаемыми форматами данной системы счисления. Для языков программирования, позволяющих проводить вычисления на хранимых форматах, рекомендуется проводить такие вычисления в более широких форматах.
- необменными являются такие форматы представления, которые не определены в данном стандарте. Данный стандарт не нуждается ни в одном таком формате. В случае реализации такого формата, он может применяться для арифметических операций, но скорее всего не подойдет для обмена данными между платформами.
-
обеспечивать средства для инициализации и хранения этого формата,
предоставлять весь описываемый в данном стандарте набор операций формата,
обеспечивать возможность конвертации из этого формата во все остальные реализованные форматы данного стандарта.
5.2 Спецификационные уровни
Как продемонстрировано таблицей 1, арифметика чисел с плавающей точкой (рациональных чисел) является методическим приближением арифметики действительных чисел. Арифметика рациональных чисел способна представить только конечное подмножество континуума действительных чисел. Следовательно, некоторые (фундаментальные – прим. пер.) свойства арифметики действительных чисел, как например ассоциативность сложения, в арифметике рациональных чисел работают не всегда.
Уровень 1 | {−∞ … 0 … +∞} | Extended real numbers. |
много-к-одному ↓ | округление | ↑ один-ко-многим |
Уровень 2 | {−∞ … −0} ∪ {+0 … +∞} ∪ NaN | Данные с плавающей точкой – алгебраически замкнутая система. |
один-ко-многим ↓ | спецификация представления | ↑ много-к-одному |
Уровень 3 | (sign, exponent, significand) ∪ {−∞, +∞} ∪ qNaN ∪ sNaN | Представление данных с плавающей точкой. |
один-ко-многим ↓ | кодирование представления данных | ↑ много-к-одному |
Уровень 4 | 0111000… | Битовые строки. |
Базовой математической структурой арифметики данного стандарта являются расширенные действительные числа, т.е. набор всех возможных действительных чисел, включающий в себя положительную и отрицательную бесконечности. Для заданного формата процесс округления (см. раздел 6; также уместен будет термин «приближение» – прим. пер.) проецирует множество расширенных действительных чисел на множество рациональных величин для заданного формата. Рациональные величины, представляющие собой ноль со знаком, конечное ненулевое число, бесконечность со знаком или не-число (NaN, not-a-number), могут быть представлены в одном или нескольких представлениях данных с плавающей точкой в заданном формате.
Представление данных с плавающей точкой в заданном формате состоит из:
-
триплета (знак, экспонента, мантисса); число с плавающей точкой представляется этим триплетом в базисе b в виде (–1)знак × bэкспонента × мантисса
+∞, −∞
qNaN (тихий, quiet), sNaN (сигнализирующий, signaling)
Кодирование отображает представление рациональных величин в битовую строку. Кодирование способно отображать некоторые представления данных с плавающей точкой в более чем одну битовую строку. Многократные битовые строки с NaN’ами могут использоваться для сохранения ретроспективной диагностической информации.
5.3 Набор данных с плавающей точкой
В этом подразделе специфицируются наборы данных с плавающей точкой, представляемые в пределах форматов чисел с плавающей точкой; кодирование представлений данных с плавающей точкой в обменные форматы обсуждается в 5.4 и 5.5. Набор конечных чисел с плавающей точкой, представимых специфическим форматом, определяется следующими целочисленными параметрами:
-
b = основание, 2 либо 10
p = количество разрядов мантиссы (точность)
emax = максимальное значение экспоненты e
emin = минимальное значение экспоненты e
-
Обязательно должно быть либо 1 − emax либо −emax.
Рекомендуется 1 − emax.
Значения этих параметров для каждого обменного формата представлены в таблице 2; ограничения на данные параметры для расширенных форматов представлены в таблице 7. Таблица 2 соотносится с обменными форматами по числу бит их кодирования. В пределах каждого формата обязательно должны быть предусмотрены следующие значения:
-
Ноль со знаком и ненулевые числа с плавающей точкой в виде (−1)s × be × m, где:
-
s – это 0 либо 1
e – любое целое в пределах emin ≤ e ≤ emax
m – представление числа в виде строки цифр в форме
d0 • d1d2…dp–1 где di является целой цифрой 0 ≤ di < b (откуда 0 ≤ m < b)
NaN – не-числа
Эти данные есть единственно необходимыми для представления чисел с плавающей точкой.
До этого момента мантисса m имела научную форму представления и содержала точку сразу после первой цифры числа. В некоторых случаях удобнее рассматривать мантиссу, как целое число; в этом случае конечные числа с плавающей точкой описываются так:
-
Ноль со знаком и ненулевые числа с плавающей точкой в виде (−1)s × bq × c, где:
-
s – это 0 либо 1
q – любое целое в пределах emin ≤ q + p − 1 ≤ emax
c представление числа в виде строки цифр в форме
d0d1d2…dp–1 где di является целой цифрой 0 ≤ di < b (следовательно, c является целым в границах 0 ≤ c < bp)
Это представление мантиссы в виде целого c, с соответствующей ему экспонентой q, определяет точной такой же набор нулей и ненулевых чисел с плавающей точкой, как и представление в научной форме. (Для конечных чисел с плавающей точкой, e = q + p – 1 и m = c × b1–p).
Наименьшим положительным нормализованным значением с плавающей точкой является bemin, а наибольшим – bemax × (b − b1–p). Ненулевые числа с плавающей точкой, величина которых меньше bemin в заданном формате, называются денормализованными благодаря тому, что их величина лежит между нулем и наименьшей возможной нормализованной величиной. Денормализованные числа выделяются из ряда нормальных чисел из-за их уменьшенной точности, а среди двоичных еще благодаря тому, что их можно закодировать различными методами. Любое конечное число с плавающей точкой является многократной суммой наименьшей денормализованной величины bemin × b1–p.
Для числа с плавающей точкой, имеющего нулевое значение, бит знака является битом дополнительной информации. Хотя у всех форматов имеются различные формы представления +0 и −0, знак нуля является существенных в некоторых особых случаях, таких, как деление на 0, однако более ни в каких других (см. 8.3). Двоичные обменные форматы имеют ровно одно представление как для +0, так и для −0, в то время как десятичные имеют много. В этом стандарте 0 и ∞ пишутся без знака в случае, если его значение неважно.
Двоичные форматы (b=2) | Десятичные форматы (b=10) | ||||||
---|---|---|---|---|---|---|---|
параметр | binary16 хранимый | binary32 базовый | binary64 базовый | binary128 базовый |
decimal32 хранимый | decimal64 базовый | decimal128 базовый |
p цифр | 11 | 24 | 53 | 113 | 7 | 16 | 34 |
emax | +15 | +127 | +1023 | +16383 | +96 | +384 | +6144 |
emin | −14 | −126 | −1022 | −16382 | −95 | −383 | −6143 |