Стандарт ieee 754 кратко

Обновлено: 02.07.2024

Стандарт IEEE 754 ( ANSI / IEEE Std 754-1985; IEC-60559: 1989 - Международная версия) определяет стандартные представления двоичных чисел с плавающей запятой в компьютерах и определяет точные процедуры для выполнения математических операций, особенно для округления. Точное название стандарта - английский стандарт IEEE для двоичной арифметики с плавающей запятой для микропроцессорных систем (ANSI / IEEE Std 754-1985) .

Текущее издание было опубликовано под названием ANSI / IEEE Std 754-2019 в июле 2019 года. Стандарт IEEE 854-1987 с английским Название Стандарт для арифметики с плавающей запятой , не зависящей от системы счисления , полностью интегрирован в IEEE 754-2008 .

Оглавление

обзор

Стандарт IEEE 754-1989 определяет два основных формата данных для двоичных чисел с плавающей запятой с 32-битными ( одинарная точность ) или 64-битными ( двойная точность ) требованиями к памяти и двумя расширенными форматами. IEEE 754-2008 включает в себя бинарные форматы чисел с 16 бит в качестве minifloat , 32 бита , как сингл , 64 бит , как двойной и новый 128 бит. Кроме того, были добавлены десятичные представления с 32 битами как minifloat, 64 и 128 бит.

Наконец, были предложения и реализации других числовых форматов, которые разработаны в соответствии с принципами стандарта IEEE 754-1989 и поэтому часто называются числами IEEE, хотя, строго говоря, они не соответствуют старому определению. К ним относятся встроенные в новые выпуски мини-поплавки, предназначенные для тренировок. 16-битные минифлоты иногда используются в графическом программировании. Есть также несколько числовых форматов с более чем 64 битами, которые не определены IEEE 754-1989, например, 80-битный формат ( Extended Precision Layout . ), который процессоры IA-32 используют внутри своей классической плавающей запятой. unit, FPU) для этого.

Общий

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

Знак хранится в бите , поэтому он отмечает положительные и отрицательные числа. s знак равно ( - 1 ) С. > С. С. знак равно 0 С. знак равно 1

Показатель используется в качестве неотрицательного двоичного числа ( иногда также упоминается как характеристика или показатель предвзятым далее) , которые хранятся в фиксированном значении смещения добавлено: . Значение смещения (англ .: искажение) рассчитывается через . Значение смещения используется, чтобы гарантировать, что отрицательные показатели могут быть сохранены беззнаковым числом (характеристика ) без альтернативных кодировок, таких как. B. два дополнения (сравните также избыточный код ). е Э. Э. Б. Э. знак равно е + Б. 2 р - 1 - 1 -1> Б. Э.

Два значения экспоненты со специальными битовыми комбинациями зарезервированы для особых случаев: максимальное значение ( ) и минимальное значение ( ). Частные случаи NaN и ∞ кодируются с максимальным значением показателя степени. Число с плавающей запятой 0 и все денормализованные значения кодируются нулем в экспоненте. Э. знак равно 11 . 111 2 знак равно 2 р - 1 = 2 ^ -1> Э. знак равно 00 . 000 2 знак равно 0 = 0>

Значения вне нормального диапазона значений (слишком большие или слишком маленькие числа) представлены символами ∞ или -∞. Такое расширение диапазона значений часто позволяет использовать дальнейшие вычисления даже в случае арифметического переполнения. Помимо числа 0 существует еще значение −0. Пока результат равен ∞, значение равно −∞. При сравнении не делается различия между 0 и -0. 1 0 >> 1 - 0 >>

В качестве последнего особого случая денормализованные числа (называемые субнормальными числами в IEEE 754r) заполняют область между наименьшим нормализованным числом с плавающей запятой по абсолютной величине и нулем. Они хранятся как числа с фиксированной запятой и не имеют такой же точности, как нормализованные числа. Из-за конструкции большинство этих значений имеют обратное значение ∞.

Числовые форматы и другие спецификации стандарта IEEE 754

В стандарте IEEE 754 различаются четыре представления: одинарное точное ( одиночное ), расширенное одинарное точное (одиночное расширенное), двойное точное ( двойное ) и расширенное двойное точное (двойное расширенное) числовые форматы. Для расширенных форматов требуется только минимальное количество битов. Точное количество битов и значение смещения оставлено на усмотрение разработчика. Основные форматы полностью определены.

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

Тип Размер (1 + r + p) Показатель (r) Мантисса (п) Значения показателя степени (е) Значение смещения (B)
не замужем 32 бит 8 бит 23 бит −126 ≤ e ≤ 127 127
одиночный расширенный ≥ 43 бит ≥ 11 бит ≥ 31 бит e мин ≤ −1022
e макс ≥ 1023
не
указано
двойной 64 бит 11 бит 52 бит −1022 ≤ e ≤ 1023 1023
двойной расширенный ≥ 79 бит ≥ 15 бит ≥ 63 бит e мин ≤ −16382
e макс ≥ 16383
не
указано
четырехместный 128 бит 15 бит 112 бит −16382 ≤ e ≤ 16383 16383

Последние два примера показывают минимальный расширенный формат.

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

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

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

Примеры

Вычисление десятичного числа → число с плавающей запятой IEEE754

Вычисление числа с плавающей запятой IEEE754 → десятичное число

Теперь указанное выше число с плавающей запятой должно быть преобразовано обратно в десятичное число, поэтому дается следующий номер IEEE754
0 10000011 00100110011001100110011

Расшифровка числового формата

Интерпретация зависит от показателя степени. Для пояснения, S - значение знакового бита (0 или 1), E - значение показателя степени как неотрицательное целое число от 0 до E max = 11… 111 = 2 r −1, M - значение мантиссы. как неотрицательное число, а буквой B обозначено значение смещения. Числа r и p обозначают количество битов экспоненты и битов мантиссы.

Характерная черта Мантисса М значение Случайно обозначение
E = 0 M = 0 (−1) S × 0 ± 0 Ноль (принадлежит денорм.)
E = 0 M > 0 (−1) S × M / 2 p × 2 1 - B ± 0, M × 2 1 - B денормализованное число
0 r −1 M > = 0 (−1) S × (1+ M / 2 p ) × 2 E - B ± 1, M × 2 E - B нормализованное число
E = 2 г −1 M = 0 Бесконечный ± ∞ Бесконечный
E = 2 г −1 M > 0 нет числа без числа (NaN)

Ноль представляет собой ноль со знаком . Числа, которые слишком малы для отображения (недостаточное число), округляются до нуля. Их знак сохраняется. Отрицательные числа округляются до -0,0, положительные числа до +0,0. Однако при прямом сравнении +0,0 и -0,0 считаются равными.

Нормализованное число

Денормализованное число

Если результат (или промежуточный результат) вычисления меньше наименьшего представимого числа используемой конечной арифметики, он обычно округляется до нуля; это называется потерей значимости арифметики с плавающей запятой. переполнение . Поскольку в процессе информация теряется, стараются по возможности избегать потери значимости. Денормализованные числа в IEEE 754 вызывают постепенное истощение (англ. Gradual underflow ) "около 0" 2 24 (для одиночного ) и 2 53 (для двойного должны быть вставлены) значений, которые имеют одинаковое абсолютное расстояние от каждого other и без этих денормализованных значений не будут представлены, но должны привести к потере значимости.

Бесконечный

Нет числа ( NaN )

IEEE 754 требует двух типов нечисловых данных: молчаливое NaN (NaNq - тихо ) и сигнальное NaN (NaNs - сигнальное ). Оба явно не представляют числа.В отличие от молчащего NaN, сигнальный NaN запускает исключение (ловушку), если оно возникает как операнд арифметической операции.

IEEE 754 позволяет пользователю деактивировать эти ловушки. В этом случае сигнальные NaN обрабатываются как молчащие NaN.

Сигнализация NaN может использоваться для заполнения неинициализированной памяти компьютера, так что каждое использование неинициализированной переменной автоматически вызывает исключение.

Silent NaN позволяет обрабатывать вычисления, которые не могут дать результат, например, потому что они не определены для указанных операндов. Примеры - деление нуля на ноль или логарифм отрицательного числа.

Тихий и сигнальный NaN различаются наивысшим битом мантиссы. При молчании NaN это 1, при сигнальном NaN 0. Остальные биты мантиссы могут содержать дополнительную информацию, например Б. Причина NaN. Это может быть полезно для обработки исключений. Однако стандарт не определяет, какая информация содержится в оставшихся битах мантиссы. Следовательно, оценка этих битов зависит от платформы.

Знаковый бит не имеет значения с NaN. Не указано, какое значение имеет знаковый бит для возвращаемого NaN.

Округления

IEEE 754 различает двоичное округление и двоично-десятичное округление, для которых применяются более низкие требования к качеству.

Двоичное округление должно быть округлено до ближайшего представимого числа. Если это четко не определено (точно посередине между двумя представимыми числами), оно округляется так, чтобы младший бит мантиссы стал 0. Статистически в 50% случаев оно округляется в большую сторону, а в остальных 50% случаев, так что статистический дрейф, описанный Кнутом, избегается при более длительных вычислениях.

Реализация, соответствующая IEEE 754, должна обеспечивать три дополнительных округления, которые могут быть установлены программистом: округление в сторону + бесконечности (всегда округление в большую сторону), округление в сторону бесконечности (всегда округление в меньшую сторону) и округление в сторону 0 (всегда уменьшайте количество).

Операции

Реализации, совместимые с IEEE 754, должны обеспечивать операции для арифметики, вычисления квадратного корня, преобразований и сравнений. В приложении рекомендована другая группа операций, но не обязательная.

Арифметика и квадратный корень

IEEE 754 требует от реализации (аппаратной или программной) точно округленных результатов для операций сложения, вычитания, умножения и деления двух операндов, а также квадратного корня операции из операнда. Это означает, что полученный результат должен быть таким же, как результат точного выполнения соответствующей операции с последующим округлением.

Кроме того, требуется вычисление остатка от деления с целочисленным результатом. Этот остаток определяется как целое число или в случае четного числа . Этот остаток необходимо определять точно без округления. р знак равно Икс - у ⋅ п п | п - Икс у | 1 2 > | п | п - Икс у | знак равно 1 2 > | = >>

Конверсии

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

Реализации, совместимые с IEEE 754, должны обеспечивать преобразование между всеми поддерживаемыми форматами с плавающей запятой и всеми поддерживаемыми целочисленными форматами. IEEE 754 не определяет более подробно целочисленные форматы.

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

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

Сравнения

Рекомендуемые операции

В приложении к стандарту рекомендовано еще десять операций. Поскольку они в основном необходимы в реализации, эта рекомендация в конечном итоге сводится к передаче операций программисту. Эти операции (в обозначении C): copysign (x, y), инвертированный (x), scalb (y, n), logb (x), nextafter (x, y), конечный (x), isnan (x), x ≠ y, неупорядоченный (x, y), класс (x). Также предлагаются детали реализации, особенно снова для особых случаев NaN и т. Д.

Исключения, флаги и ловушки

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

В стандарте исключения делятся на 5 категорий: переполнение, потеря значимости, деление на ноль, недопустимая операция и неточная. Флаг статуса доступен для каждого класса.

история

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

Примерно в 1976 году Intel планировала свой собственный FPU для своих микропроцессоров и хотела, чтобы было реализовано наилучшее возможное решение для арифметики. Встречи начались в 1977 году под эгидой IEEE по стандартизации FPU для арифметики с плавающей запятой для микропроцессоров. Вторая встреча состоялась в ноябре 1977 года в Сан-Франциско под председательством Ричарда Делпа . Одним из ведущих участников был Уильям Кахан .

Одновременно с разработкой стандарта Intel в значительной степени реализовала стандартные предложения в Intel FPU 8087 , который использовался в качестве сопроцессора с плавающей запятой для 8088. Первая версия стандарта была принята в 1985 году и расширена в 2008 году.

литература

  • IEEE 754: перепечатано в SIGPLAN Notices , Vol. 22, No. 2, Feb. 1987, pp. 9-25
  • Жан-Мишель Мюллер: элементарные функции - алгоритмы и реализация . 2-е издание. Birkhäuser, Lyon 2006, ISBN 0-8176-4372-9 .

веб ссылки

Индивидуальные доказательства

    Эта страница последний раз была отредактирована 27 июля 2021 в 13:09.

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

1.ЕСТЕСТВЕННАЯ И ЭКСПОНЕНЦИАЛЬНАЯ ФОРМЫ ЗАПИСИ ЧИСЕЛ

Из математики известно, что любое действительное число F в позиционной системе счисления с основанием q записывается на бумаге в виде последовательности цифр. Вес цифры зависит от ее позиции в числе. Основание системы q равно количеству цифр (знаков ее алфавита) и определяет, во сколько раз различаются значения цифр соседних разрядов числа. Такая запись числа называется естественной и выглядит следующим образом:

F = c_(L-1,) c_(L-2)…c_(0.) d_(0 )…d_(N-2,) d_(N-1,) (1)

Где c_(L-1,) c_(L-2)…c_0- цифры целой части, а d_(0 )…d_(N-2,) d_(N-1) — цифры дробной части числа. Число может состоять из сколь угодно большого количества значащих цифр L целой части и N цифр дробной части.
Если точку в числе F, представленном выражением (1) переместить на h разрядов влево, то мы получим новое число М, которое связано с первоначальным числом формулой, представляющей собой экспоненциальную зависимость:

Значение числа F при этом уменьшится в h раз. Чтобы число не изменилось, его умножают на величину q^h. Таким образом, число, записанное в естественном виде (1), может быть представлено в эквивалентном ему экспоненциальном виде:

Если точку в числе F, представленном выражением (1) переместить на h разрядов вправо, то мы получим новое число М, которое связано с первоначальным числом формулой:

Значение числа F при этом увеличится в h раз. Чтобы число не изменилось, его умножают на величину q^(-h). Таким образом, для рассматриваемого случая, число, записанное в естественном виде (1), может быть представлено в следующем эквивалентном ему экспоненциальном виде:

В общем случае, любое действительное число, записанное в естественной форме (1), может быть записано в эквивалентном ему экспоненциальном виде следующим образом:

где М представляет собой число (1) со смещенной точкой на h позиций в ту или иную сторону. Число М в такой записи принято называть мантиссой числа, а q^(±h) характеристикой числа с порядком ±h, который в литературе еще называют экспонентой. Знак и величина порядка h компенсируют величину смещения точки относительно ее первоначального положения в числе (1). Обе записи (1) и (4) суть записи одного и того же числа различным образом.

Число (1) имеет L + N разрядов. Поскольку в естественном представлении числа (1) число разрядов L целой части и N разрядов дробной части могут иметь сколь угодно большое значение, то число M в (2) также может иметь сколь угодно большое количество разрядов. В общем случае, количество разрядов числа М в (2) может быть бесконечным. Например, когда число представляет собой периодическую дробь, или число иррационально. На практике мы имеем дело с ограниченным количеством разрядов для представления действительного числа в естественной форме. Сколько бы разрядов числа мы ни писали справа, рано или поздно мы должны ограничить количество разрядов представляемого числа. Хотя бы потому, что писать будет уже некуда. В результате, число сначала ограничивают, а затем округляют до приемлемой для данной задачи крайней правой цифры. При этом, конечно, теряется точность представления этого числа. Вопросы точности представления чисел в математике мы здесь не затрагиваем. Этому вопросу посвящено огромное число работ. Отметим только, что точность представления числа выбирается в разумных пределах и поэтому действительное число всегда записывается с ограничением разрядности. Тем самым, строго говоря, оно становится рациональным числом. В компьютерной литературе, числа, имеющие дробную часть, принято называть действительными числами. Мы тоже будем придерживаться этой терминологии.

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

2. ПРЕДСТАВЛЕНИЕ ЧИСЕЛ В МАШИННОМ СЛОВЕ

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

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


В этом слове К разрядов отводится для записи мантиссы M, R разрядов под запись порядка h характеристики и по одному разряду отводится под запись знака S числа и z знака порядка. Машинное пространство, выделенное под запись мантиссы числа, будем называть областью машинной мантиссы (ОММ), а число, записанное в эту область, машинной мантиссой. Аналогично, пространство, выделенное в машине под запись порядка характеристики, будем называть областью машинного порядка (ОМП) характеристики, а число, записанное в эту область будем называть машинным порядком. Если в ОММ в явном виде содержится точка, то числа, представленные в таком формате, называются числами с фиксированной точкой. Далее мы будем рассматривать числа, записанные в экспоненциальном виде (2). Числа, представленные в таком формате, называют еще числами с плавающей точкой.

3. НОРМАЛИЗАЦИЯ ЧИСЕЛ

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

Возьмем двоичное число 0.001001 и запишем его в экспоненциальном виде в машинное слово, в котором ОММ имеет 3 разряда. В том случае, когда предполагается, что машинная мантисса представлена в виде правильной дроби, мы будем иметь следующие возможные варианты записи этого числа: 0.1001•2^(-2)=0.100•2^(-2)=0.010•2^(-1)=0.001•2^0. Во всех этих случаях младший разряд записываемого числа был утерян, поскольку он вышел за пределы разрядной сетки ОММ. Итак, мы получили запись одного и того же числа различными вариантами.

Налицо неоднозначность представления чисел в машинном слове. Мы должны указать машине критерий выбора, по которому отдается предпочтение той или иной форме записи числа в машинном слове. Запись экспоненциального числа в формате, в котором мантисса числа представляется единственным образом, называется нормализацией.

В настоящее время чаще всего рассматриваются два варианта нормализации чисел. В первом варианте [1], перед записью в машинное слово число представляется в виде двоичного дробного числа, в котором единица стоит сразу после точки. При такой нормализации двоичная мантисса в виде правильной дроби лежит в диапазоне 0.1≤М

IEEE 754 (IEC 60559) — широко используемый стандарт IEEE, описывающий формат представления чисел с плавающей точкой. Используется в программных (компиляторы разных языков программирования) и аппаратных (CPU и FPU) реализациях арифметических действий (математических операций).

  • формат чисел с плавающей точкой: мантисса, экспонента (показатель), знак числа;
  • представление положительного и отрицательного нуля, положительной и отрицательной бесконечностей, а также нечисла́ (англ. Not-a-Number, NaN );
  • методы, используемые для преобразования числа при выполнении математических операций;
  • исключительные ситуации: деление на ноль, переполнение, потеря значимости, работа с денормализованными числами и другие;
  • операции: арифметические и другие.

Стандарт 2008 года заменяет IEEE 754-1985 . В новый стандарт включены двоичные форматы из предыдущего стандарта и три новых формата. В соответствии с действующим стандартом, реализация должна поддерживать по крайней мере один из основных форматов, как и формат арифметики и формат обмена.

Microsoft C++ (MSVC) поддерживает стандартные числовые форматы IEEE. В стандарте IEEE-754 описываются форматы с плавающей запятой, которые используются для аппаратного представления действительных чисел. Есть как минимум пять внутренних числовых форматов для чисел с плавающей запятой, которые могут быть представлены в оборудовании, предназначенном для компилятора MSVC. Компилятор использует только два из них. В MSVC используются форматы с одиночной (4 байта) и двойной (8 байтов) точностью. Формат одиночной точности объявляется с помощью ключевого слова float . Формат двойной точности объявляется с помощью ключевого слова double . Стандарт IEEE также определяет форматы с половинной точностью (2 байта) и четверной точностью (16 байт), а также формат с двойной точностью (10 байт), в котором некоторые компиляторы C и C++ реализуются как тип данных. В компиляторе MSVC тип данных long double рассматривается как отдельный тип, но в качестве типа хранения с ним сопоставляется тип double . Тем не менее вычисления с использованием других форматов, в том числе расширенной двойной точности, могут поддерживаться некоторым оборудованием на собственном уровне или на уровне языка ассемблера.

Значения хранятся в следующем виде:

Значение Хранение
одиночная точность разряд знака, 8 разрядов показателя степени, 23 разряда значащей части
двойная точность разряд знака, 11 разрядов показателя степени, 52 разряда значащей части

В форматах с одиночной и двойной точностью в дробной части предполагается первый символ 1. Дробная часть называется значащей частью или мантиссой. Это начальное значение 1 не сохраняется в памяти, так что по сути значащая часть имеет длину 24 или 53 бита, из которых хранится на один бит меньше. В формате расширенной двойной точности этот разряд сохраняется в памяти.

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

Смещение показателя степени определяется следующим образом:

Показатель степени Величина смещения
8 разрядов (одиночная точность) 127
11 разрядов (двойная точность) 1023

Значащая часть хранится в виде двоичной части в форме 1.XXX. Эта часть имеет значение больше 1 и меньше 2. Вещественные числа всегда хранятся в нормализованном представлении. В частности, значение значащей части всегда смещается влево, чтобы ее старший бит имел значение 1. Так как этот разряд всегда равен 1, для форматов одиночной и двойной точности его значение принимается по умолчанию и не хранится в памяти. Двоичная (не десятичная) точка располагается непосредственно справа от начальной 1.

Формат представления с плавающей запятой выглядит следующим образом:

Формат байт 1 байт 2 байт 3 байт 4 . байт n
одиночная точность SXXXXXXX XMMMMMMM MMMMMMMM MMMMMMMM
двойная точность SXXXXXXX XXXXMMMM MMMMMMMM MMMMMMMM . MMMMMMMM

S представляет разряд знака, X — это разряды смещенного показателя степени, а M — это значащие разряды. В форматах одиночной и двойной точности значение самого левого бита предполагается.

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

Специальные значения

Форматы с плавающей запятой предусматривают некоторые значения, которые обрабатываются особым образом.

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

Бесконечность

Значения +∞ и −∞ представляются с экспонентой из одних единиц и мантиссой из одних нулей. Разряд знака определяет знак бесконечности.

Субнормальные числа

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

NaN (не число)

В формате IEEE с плавающей запятой могут быть представлены значения, не являющиеся действительными числами, например 0/0. Значения такого вида называются NaN (не число). Значение NaN представляется состоящим из единиц показателем степени и отличной от нуля значащей частью. Существует два вида значений NaN: несигнальные (QNaN) и сигнальные (SNaN). Для несигнальных значений NaN старший разряд значащей части равен единице, и эти значения распространяются через выражения. Они представляют неопределенные значения, например результат деления на бесконечность или умножения бесконечности на нуль. Для сигнальных значений NaN старший разряд значащей части равен нулю. Эти значения используются для недопустимых операций, указывая на аппаратное исключение, связанное с обработкой чисел с плавающей запятой.

Примеры

Ниже приводятся примеры чисел в формате одиночной точности:

Для значения 2 знаковый бит имеет значение 0. Сохраняется экспонента 128, то есть двоичное значение 1000 0000, вычисляемое как 127 плюс 1. Сохраненный двоичный значащим имеет значение (1). 000 0000 0000 0000 0000 0000, которая имеет неявные начальные значения 1 и binary, поэтому фактический значащим является одним.

Значение –2. То же, что и + 2, однако в этом случае задан разряд знака. Таким же образом задаются отрицательные числа во всех форматах IEEE с плавающей запятой.

Значение 4. Та же значащая часть, показатель степени увеличивается на единицу (смещенное значение 129 или 100 0000 1 в двоичном формате).

Значение 6. Тот же показатель степени; значащая часть увеличивается наполовину. Это (1.) 100 0000. 0000 0000, что, поскольку это двоичная дробь, имеет значение 1 1/2, так как значения дробных разрядов равны 1/2, 1/4, 1/8 и т. д.

Значение 1. Та же значащая часть, что и для остальных степеней двух; смещенный показатель степени на единицу меньше, чем у двух при 127, то есть 011 1111 1 в двоичном формате.

Значение 0,75. Смещенный показатель степени равен 126, 011 1111 0 в двоичном формате, а значащим имеет значение (1). 100 0000. 0000 0000, то есть 1 1/2.

Значение 2,5. Так же, как и два, однако в значащей части задан разряд, который представляет 1/4.

1/10 — это повторяющаяся часть в двоичном формате. Значащая часть здесь немного меньше 1,6, а экспонента с учетом смещения указывает, что 1,6 нужно разделить на 16. (Это 011 1101 1 в двоичном формате, то есть 123 в десятичном формате.) Фактический показатель степени 123 – 127 = –4. Это значит, что выполняется умножение на 2 –4 = 1/16. Хранимая в памяти значащая часть округляется до последнего разряда, чтобы представить выходящие за пределы числа с максимально возможной точностью. (Величины 1/10 и 1/100 нельзя точно представить в двоичном формате по той же причине, по которой 1/3 нельзя представить в десятичном.)

Нуль рассматривается как особый случай. Для него используется формула минимального положительного числа, которое может быть представлено, то есть представление из одних нулей.

Читайте также: