Стандарт IEEE для чисел з рухомою комою (IEEE 754) — технічний стандарт формату представлення чисел з рухомою комою, створений у 1985 році Інститутом інженерів з електротехніки та електроніки (IEEE). Стандарт вирішував багато проблем, виявлених у різноманітних реалізаціях з рухомою комою, що ускладнювало їхнє надійне та портативне використання. Багато апаратних пристроїв із рухомою комою використовують стандарт IEEE 754. Використовується як у програмних реалізаціях арифметичних дій, так і в багатьох апаратних (CPU та FPU) реалізаціях. Багато компіляторів мов програмування використовують цей стандарт для зберігання чисел та виконання математичних операцій.

Стандарт визначає формати і методи для арифметики з рухомою комою в комп'ютерних системах — стандартні та розширені функції для чисел одинарної, подвійної, розширеної і розширюваної точності — і рекомендує формати для обміну даними[1]. Визначає виняткові ситуації та їхню стандартну обробку.

Цей стандарт визначає:

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

IEEE 754-2008, опублікований у серпні 2008 року, містить майже весь оригінальний стандарт IEEE 754-1985, а також стандарт IEEE 854-1987 для арифметики з рухомою крапкою, незалежну від кореня. Поточна версія, IEEE 754-2019, була опублікована в липні 2019 року.[2] Це незначна редакція попередньої версії, яка включає в основному уточнення, виправлення дефектів і нові рекомендовані операції.

Коротка історія

ред.

Стандарт IEEE 754 був розроблений робочою групою Floating-Point Working Group комітету стандартів Інституту інженерів з електротехніки та електроніки IEEE у 1985 році. Провідну роль у розробці стандарту відіграв професор Каліфорнійського університету в Берклі Вільям Кехен, якого часто називають «батьком рухомої коми»[3].

Після 2000 року робоча група зайнялася удосконаленням існуючого стандарту IEEE Std 754—1985 з метою усунення недоліків, об'єднання його зі стандартом IEEE Std 854—1987 та доповнення новими можливостями[4]. Ця робота завершилася у 2008 році прийняттям нового стандарту IEEE Std 754—2008[1]. Пізніше цей стандарт був затверджений Міжнародною організацією зі стандартизації як ISO/IEC/IEEE 60559:2011[5].

Основні терміни[1]

ред.

Основний формат (basic format) — одне із п'яти представлень чисел з рухомою комою (три двійкових і два десяткових), визначених цим стандартом і призначених для арифметики.

Формат обміну (interchange format) — формат, що має визначене кодування фіксованої ширини, визначене цим стандартом.

Формат розширеної точності (extended precision format) — формат, який розширює основний формат, надаючи більшу точність і діапазон представлення чисел.

Формат розширюваної точності (extendable precision format) — формат з точністю і діапазоном, які визначаються користувачем.

Не число (not a number, NaN) — код, який не є чинним представленням жодного з чисел з рухомою комою. Буває двох типів «тихе не число» та «сигнальне не число».

Тихе не число (quiet NaN, qNaN) — є результатом операції, який не є числом з рухомою комою, хоча й не призводить до генерації виключень (наприклад, операції 0/0 або корінь з від'ємного числа дають NaN).

Сигнальне не число (signaling NaN, sNaN) — сигналізує про неприпустиме значення числа з рухомою комою шляхом генерації виключення. Зазвичай сигналізує про неініціалізовані змінні.

Зміщений порядок (biased exponent) — сума порядку і зміщення (константи), обраного так, щоб усі порядки були невід'ємними.

Хвіст мантиси (trailing significand) — дробова частина нормалізованої мантиси (для двійкового представлення — усі біти мантиси, крім найстаршого).

Формати

ред.

Стандарт визначає формати чисел з рухомою комою, які використовуються для представлення скінченної підмножини дійсних чисел. Формати характеризуються основою системи числення (radix або base), точністю (precision) і діапазоном значень порядку (range). Визначені конкретні кодування для двійкових і десяткових форматів.

Оновлений стандарт IEEE Std 754—2008 визначає два види форматів:

  • формати обміну, визначені як бітові послідовності фіксованої довжини, що дозволяють здійснювати обмін даними між різними платформами (за умови, що вирішені питання порядку слідування байтів);
  • формати розширеної і розширюваної точності, кодування яких точно не визначене, але може відповідати форматам обміну.

Формати обміну включають п'ять основних форматів фіксованого розміру:

  • три двійкових формати з кодами довжиною 32, 64 і 128 біт (binary32, binary64, binary128);
  • два десяткових формати з кодуваннями довжиною 64 і 128 біт (decimal64, decimal128).

Формати binary32 і binary64 відповідають форматам одинарної та подвійної точності стандарту IEEE 754—1985.

Параметри кодування чисел

ред.

Представлення даних з рухомою комою включає:

  • трійку елементів (знак s, порядок e, мантиса m); в системі числення за основою b число з рухомою комою має вигляд (−1)s × m × be;
  • дві нескінченності +∞, −∞;
  • два типи не чисел qNaN (тихе), sNaN (сигнальне).

Кодування переводить дані з рухомою комою в бітову послідовність. Бітові послідовності NaN можуть містити ретроспективну діагностичну інформацію.

Числа з рухомою комою представляються в заданому форматі за допомогою наступних параметрів:

  • основа b (2 або 10);
  • кількість цифр мантиси (точність) p;
  • максимальний порядок e = emax;
  • мінімальний порядок e = emin.

Для всіх форматів справедливо emin = 1 − emax.

Кодування двійкових даних

ред.

Дані з рухомою комою у форматах обміну представляються k бітами за допомогою трьох полів:

  • 1-бітовий знак S;
  • w-бітовий зміщений порядок E = e + bias;
  • t-бітовий (t = p−1) хвіст мантиси T = d1d2…dp−1; ведучий біт мантиси d0, неявно закодований у зміщеному порядку E.
MSB   LSB
знак S порядок E хвіст мантиси T
1 біт w бітів t = p — 1 бітів

Для представлення у цьому форматі двійкове число спочатку нормалізується, тобто приводиться до такого вигляду, коли мантиса потрапляє в діапазон 1 ≤ m < 2. Таким чином ціла частина нормалізованої мантиси завжди дорівнює 1.

Знак додатних чисел кодується нулем, від'ємних одиницею. В поле порядку пишеться зміщений порядок — до порядку нормалізованого числа додається константа, таким чином всі порядки представляються додатними числами. В поле мантиси записується, т. зв. «хвіст» мантиси — всі дробові цифри мантиси (крім першої одиниці, яка є цілою частиною). Ціла частина мантиси в нормалізованому вигляді дорівнює 1 і не входить до коду числа. Це так звана прихована одиниця.

Приклад. 0,312510 = 0,01012 = 1,01 × 2−2. Для формату binary32 порядок зміщується на 127. E = –2 + 127 = 125 = 11111012. Мантиса записується без першої одиниці, тобто T = 01 (1,01 –1 = 0,01). Компоненти коду: знак — 0 (1 розряд), зміщений порядок — 01111101 (8 розрядів), хвіст мантиси 01000000000000000000000 (23 розряди).

Повний 32-бітний код 00111110101000000000000000000000. Кольором виділено поле порядку.

Зведена таблиця форматів IEEE Std 754—2008

ред.
Формат Назва Основа Цифр
мантиси
Десяткових
цифр
Бітів
порядку
Десяткове
E max
Зміщення
порядку
E min E max Примітки
binary16 Half precision 2 11 3.31 5 4.51 24−1 = 15 −14 +15 не основний
binary32 Single precision 2 24 7.22 8 38.23 27−1 = 127 −126 +127
binary64 Double precision 2 53 15.95 11 307.95 210−1 = 1023 −1022 +1023
binary128 Quadruple precision 2 113 34.02 15 4931.77 214−1 = 16383 −16382 +16383
decimal32 10 7 7 7.58 96 101 −95 +96 не основний
decimal64 10 16 16 9.58 384 398 −383 +384
decimal128 10 34 34 13.58 6144 6176 −6143 +6144

Примітки

ред.
  1. а б в IEEE Standard for Floating-Point Arithmetic [Архівовано 19 лютого 2017 у Wayback Machine.]. IEEE, 2008.
  2. IEEE 754, 2019
  3. Haigh, Thomas. William («Velvel») Morton Kahan (англ.). Архів оригіналу за 3 червня 2017. Процитовано 3 лютого 2017.
  4. Handbook of Floating-Point Arithmetic [Архівовано 16 лютого 2017 у Wayback Machine.]. Birkhäuser Boston, 2010.
  5. ISO/IEC/IEEE 60559:2011 — Інформаційні технології — Мікропроцесорні системи — Арифметика з рухомою комою. Архів оригіналу за 4 березня 2016. Процитовано 3 лютого 2017.

Посилання

ред.