Открыть сервис

Стандарт IEEE 754

Стандарт IEEE 754 (IEEE Standard for Floating-Point Arithmetic) — это технический стандарт, определяющий форматы представления чисел с плавающей запятой, операции над ними, обработку исключительных ситуаций (переполнение, деление на ноль, нечисловые значения) и режимы округления. Разработан Институтом инженеров электротехники и электроники (IEEE). Является основой для вычислений с плавающей запятой в подавляющем большинстве современных компьютерных систем, от микроконтроллеров до суперкомпьютеров.

История

Предпосылки создания

До появления стандарта каждый производитель компьютеров (IBM, DEC, Cray, Intel и другие) использовал собственные форматы представления вещественных чисел. Это приводило к несовместимости данных, различиям в точности вычислений и сложностям при переносе программного обеспечения между разными архитектурами. К концу 1970-х годов стало очевидно, что необходима унификация.

Разработка и принятие

Работа над стандартом началась в 1977 году под руководством Уильяма Кахана (William Kahan), который впоследствии получил за свой вклад в численные методы и стандартизацию вычислений премию Тьюринга. В 1985 году был принят первый вариант стандарта — IEEE 754-1985. Он определил основные форматы: одинарной (32 бита) и двойной (64 бита) точности, а также базовые правила округления и обработки исключений.

Последующие версии

  • IEEE 754-2008 — существенно переработанная версия. Включила формат половинной точности (16 бит), четверной точности (128 бит) и десятичные форматы (32, 64 и 128 бит). Уточнены правила сравнения, операции с корнями и тригонометрические функции. Введена концепция «полезных» (subnormal) чисел.
  • IEEE 754-2019 — текущая редакция. Внесены незначительные уточнения, в частности, касающиеся операций с десятичными форматами и обработки сигналов NaN.

Основные форматы

Стандарт определяет несколько двоичных форматов, отличающихся разрядностью и диапазоном представимых чисел. Все они имеют общую структуру: знак (1 бит), экспонента (смещённая) и мантисса (дробная часть).

ФорматОбозначениеРазрядность (бит)Биты экспонентыБиты мантиссыПриблизительный диапазон
Половинная точностьbinary1616510±6,1×10⁻⁵ … ±6,5×10⁴
Одинарная точностьbinary32 (float)32823±1,2×10⁻³⁸ … ±3,4×10³⁸
Двойная точностьbinary64 (double)641152±2,2×10⁻³⁰⁸ … ±1,8×10³⁰⁸
Четверная точностьbinary12812815112±3,4×10⁻⁴⁹³² … ±1,2×10⁴⁹³²

Десятичные форматы

Стандарт также включает форматы с десятичным основанием (decimal32, decimal64, decimal128), предназначенные для финансовых и коммерческих расчётов, где требуется точное представление десятичных дробей (например, 0,1). В этих форматах число хранится в виде кодированной десятичной цифры, что исключает ошибки округления, свойственные двоичным форматам.

Структура числа с плавающей запятой

Число в двоичном формате IEEE 754 представляется как:

\[ \text{число} = (-1)^{\text{sign}} \times (1 + \text{fraction}) \times 2^{\text{exponent} - \text{bias}} \]

где:

  • sign (бит знака) — 0 для положительных чисел, 1 для отрицательных.
  • exponent (экспонента) — целое число без знака, хранящееся со смещением (bias). Для binary32 bias = 127, для binary64 bias = 1023.
  • fraction (мантисса) — дробная часть, хранящаяся в нормализованном виде (подразумевается ведущая единица, кроме случая субнормальных чисел).

Особые значения

Стандарт резервирует некоторые комбинации битов экспоненты и мантиссы для представления специальных величин:

  • Ноль — два нуля: +0 и -0 (различаются только битом знака). Сравнение +0 и -0 даёт «равно».
  • Бесконечность — +∞ и -∞. Возникает при переполнении (результат превышает максимальное представимое число) или делении ненулевого числа на ноль.
  • NaN (Not a Number) — нечисловые значения. Используются для обозначения результатов неопределённых операций (например, 0/0, ∞ - ∞, sqrt(-1)). Различают тихие (quiet NaN) и сигнальные (signaling NaN). Тихие NaN распространяются через вычисления, не вызывая исключения; сигнальные — инициируют исключение при попытке использования.
  • Субнормальные числа (subnormal, ранее denormalized) — числа, меньшие минимального нормализованного. Позволяют реализовать «постепенное исчезновение» (gradual underflow), уменьшая потерю точности при работе с очень малыми величинами.

Операции

Стандарт предписывает точное выполнение следующих операций для всех форматов:

  • Арифметические: сложение, вычитание, умножение, деление, вычисление квадратного корня, остаток от деления.
  • Сравнения: равно, не равно, меньше, больше, меньше или равно, больше или равно. Сравнение с NaN всегда даёт «ложь» (кроме проверки на неравенство).
  • Преобразования: между форматами с плавающей запятой, между целыми числами, между строками (в обоих направлениях).
  • Специальные: копирование знака, округление до целого, извлечение компонентов числа.

Режимы округления

IEEE 754 определяет пять режимов округления, которые выбираются программно или устанавливаются по умолчанию:

  1. Округление к ближайшему чётному (round to nearest, ties to even) — наиболее распространённый режим. Результат округляется до ближайшего представимого числа; если число находится ровно посередине, округляется до чётной мантиссы.
  2. Округление к ближайшему с округлением от нуля (round to nearest, ties away from zero) — аналогично, но половинные значения округляются в сторону от нуля.
  3. Округление к нулю (round toward zero) — усечение дробной части.
  4. Округление к +∞ (round toward +∞) — округление вверх.
  5. Округление к -∞ (round toward -∞) — округление вниз.

Исключения и обработка ошибок

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

  • Недействительная операция (invalid operation) — например, 0/0, ∞ - ∞, sqrt(-1). Результат — NaN.
  • Деление на ноль (division by zero) — результат ±∞.
  • Переполнение (overflow) — результат слишком велик для представления. В зависимости от режима округления может дать ±∞ или максимальное нормализованное число.
  • Исчезновение (underflow) — результат слишком мал для нормализованного представления. Результат — субнормальное число или ноль.
  • Неточный результат (inexact) — результат требует округления (возникает практически при любой операции, кроме точных).

Применение

Стандарт IEEE 754 является основой численных расчётов в большинстве областей:

  • Научные и инженерные вычисления — математические пакеты (MATLAB, Mathematica, SciPy), симуляции физических процессов, обработка сигналов.
  • Финансовые расчёты — десятичные форматы используются в банковском деле, бухгалтерии, страховании для точного представления денежных сумм.
  • Графика и мультимедиа — формат половинной точности широко применяется в графических процессорах (GPU) для текстур, буферов глубины, шейдеров.
  • Машинное обучение — формат bfloat16 (Brain Floating Point, модификация IEEE 754) и FP16 используются для обучения и инференса нейросетей.
  • Встраиваемые системы — микроконтроллеры и DSP с аппаратной поддержкой IEEE 754.

Критика и ограничения

  • Неравномерное распределение точностичисла с плавающей запятой плотнее расположены около нуля и реже — на периферии диапазона. Это может приводить к неожиданным ошибкам округления.
  • Сложность субнормальных чисел — обработка субнормальных чисел может быть значительно медленнее нормальных (на некоторых архитектурах в десятки раз), что требует оптимизации кода.
  • Неоднозначность десятичных форматов — десятичные форматы IEEE 754-2008 не получили широкого распространения в процессорах общего назначения (кроме некоторых мейнфреймов IBM), уступая место специализированным библиотекам.
  • Отсутствие поддержки в некоторых языках — не все языки программирования гарантируют строгое соответствие стандарту (например, в JavaScript все числа — double, но некоторые операции могут отличаться).

Источники

  1. IEEE Standard for Floating-Point Arithmetic. IEEE Std 754-2019 (Revision of IEEE Std 754-2008). — IEEE, 2019.
  2. Goldberg D. What Every Computer Scientist Should Know About Floating-Point Arithmetic // ACM Computing Surveys. — 1991. — Vol. 23, No. 1. — P. 5–48.
  3. Kahan W. Why Do We Need a Floating-Point Standard? // IEEE Micro. — 1981. — Vol. 1, No. 2. — P. 54–62.
  4. Overton M. L. Numerical Computing with IEEE Floating Point Arithmetic. — SIAM, 2001.
  5. Muller J.-M. et al. Handbook of Floating-Point Arithmetic. — 2nd ed. — Birkhäuser, 2018.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →