Число з рухомою комою

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Число з рухомою комою[1][2][3] — форма подання дійсних чисел, в якій число зберігається у формі мантиси і показника степеня.

Число з рухомою комою має фіксовану відносну точність, залежну від кількості розрядів мантиси, і змінювану абсолютну. Найчастіше використовувані подання затверджено в стандарті IEEE 754. Реалізація математичних операцій з числами з рухомою комою у комп'ютерах може бути як апаратною, так і програмною.

«Рухома кома» та «рухома крапка»[ред. | ред. код]

Оскільки в деяких, переважно англомовних та англіцизованих країнах (див. докладний список десятковий розділювач) при запису чисел ціла частина відділяється від дробової крапкою, то в термінології цих країн фігурує назва «рухома крапка» (англ. floating point). Оскільки в Україні ціла частина числа від дробової традиційно відділяється комою, то для позначення того ж поняття історично використовується термін «рухома кома», проте в літературі та технічній документації можна зустріти обидва варіанти.

Походження назви[ред. | ред. код]

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

Перевага використання подання чисел у форматі з рухомою комою порівняно з використанням у форматі з фіксованою комоюцілими числами) полягає в тому, що можна використовувати істотно ширший діапазон значень за незмінної відносної точності. Наприклад, у формі з фіксованою комою число, що має 8 розрядів у цілій частині і 2 розряди після коми, можна подати у вигляді 123456,78; 8765,43; 123,00 і так далі. У свою чергу, у форматі з рухомою комою (в тих же 8 розрядах) можна записати числа 1,2345678; 1234567,8; 0,000012345678; 12345678000000000 і так далі, але для цього потрібне дворозрядне[прояснити] додаткове поле для запису показника степеня 10 від 0 до 1610, при цьому загальне число розрядів складе 8+2=10.

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

Структура числа[ред. | ред. код]

Число з рухомою комою складається зі:

  • Знаку мантиси (вказує на від'ємність чи додатність числа)
  • Мантиси (виражає значення числа без урахування порядку)
  • Знаку порядку
  • Порядку (виражає степінь основи числа, на яке множиться мантиса)

Нормальна форма та нормалізована форма[ред. | ред. код]

Нормальною формою числа з рухомою комою називається така форма, в якій мантиса (без урахування знаку) міститься на напівінтервалі [0; 1) (). Така форма запису має недолік: деякі числа записуються неоднозначно (наприклад, 0,0001 можна записати в 4 формах — 0,0001×100, 0,001×10-1, 0,01×10-2, 0,1×10-3), тому поширеною (особливо в інформатиці) є й інша форма запису — нормалізована, в якій мантиса десяткового числа набуває значень від 1 (включно) до 10 (НЕ включно), а мантиса двійкового числа набуває значень від 1 (включно) до 2 (НЕ включно) (). У такій формі будь-яке число (крім 0) записується єдиним чином. Недолік полягає в тому, що в такому вигляді неможливо отримати 0, тому представлення чисел в інформатиці передбачає спеціальну ознаку (біт) для числа 0.

Оскільки старший розряд (ціла частина числа) мантиси двійкового числа (крім 0) в нормалізованому вигляді дорівнює «1», то при записі мантиси числа в ЕОМ старший розряд можна не записувати, що й використовується в стандарті IEEE 754. В позиційних системах числення з основою, більшою, ніж 2 (в трійковій, четвірковій та інших), цієї властивості немає.

Використання в обчислювальних машинах[ред. | ред. код]

В обчислювальних машинах показник степеня прийнято відокремлювати від мантиси літерою «E» (англ. exponent). Наприклад, число 1,528535047×10-25 у більшості мов програмування високого рівня записується як 1.528535047E-25.

Короткий огляд[ред. | ред. код]

Існує кілька способів того, як рядки з цифр можуть подавати числа:

  • Найпоширеніший спосіб подання значення числа рядком з цифрами — у вигляді цілого числа  — кома (radix point) за замовчуванням розташована наприкінці рядка.
  • Загалом, у математичному поданні рядок з цифр може мати яку завгодно довжину, а положення коми позначається явним записом символу коми (або крапки) в потрібному місці.
  • У системах з поданням чисел у форматі з фіксованою комою існує певна умова щодо положення коми. Наприклад, у рядку з 8 цифр умова може вказувати положення коми в середині запису (між 4-ю і 5-ю цифрами). Таким чином, рядок «00012345» позначає число 1,2345 (нулі ліворуч завжди можна відкинути).
  • В експоненційному записі використовують стандартний (нормалізований) вид подання чисел. Число вважається записаним у стандартному (нормалізованому) вигляді, якщо воно записане у вигляді , де , зване мантисою, таке, що ,   — ціле, називається показником степеня та   — ціле, основа системи числення (на письмі це зазвичай 10). Тобто у мантиси кома поміщається одразу після першої значущої (не рівної нулю) цифри, рахуючи зліва направо, а подальший запис дає інформацію про дійсне значення числа. Наприклад, період обертання (на орбіті) супутника Юпітера Іо, який дорівнює 152853,5047 с, у стандартному вигляді можна записати як 1,528535047×105 с. Побічним ефектом обмеження на значення мантиси є те, що в такому записі неможливо зобразити число 0.
  • Запис із рухомою комою схожий на запис чисел у стандартному вигляді, але мантиса та експонента записуються окремо. Повертаючись до прикладу з Іо, запис у формі з рухомою комою буде 1528535047 з показником 5. Це означає, що записане число в 105 разів більше числа 1,528535047, тобто для отримання потрібного числа кома зсувається на 5 розрядів вправо. Однак, запис у формі з рухомою комою використовується переважно в електронному поданні чисел, для якого використовується основа системи числення 2, а не 10. Крім того, в двійковій системі запису мантиса зазвичай денормалізована, тобто вважається, що кома стоїть перед першою цифрою, а не після, і ціла частина взагалі не розглядається  — так з'являється можливість значення 0 зберегти природним чином. Таким чином, десяткова 9 в двійковому поданні з рухомою комою буде записана як мантиса +1001000…0 і показник +0…0100. Звідси, наприклад, проблеми з двійковим поданням чисел на зразок однієї десятої (0,1), для якої двійкове подання мантиси виявляється періодичним двійковим дробом  — за аналогією з дробом 1/3, який неможливо записати з скінченною кількістю цифр у десятковій системі числення.

Запис числа у формі з рухомою комою дозволяє виконувати обчислення над широким діапазоном величин, поєднуючи фіксовану кількість розрядів та точність. Наприклад, у десятковій системі подання чисел з рухомою комою (3 розряди) операція множення, яку ми записуємо так:

0,12 × 0,12 = 0,0144

у нормальній формі подається у вигляді: (1,20×10-1) × (1,20×10-1) = (1,44×10-2). У форматі з фіксованою комою ми б отримали вимушене округлення

0,120 × 0,120 = 0,014.

При цьому втрачено крайній правий розряд числа, оскільки цей формат не дозволяє комі «рухатися» по запису числа.

Діапазон чисел, які можна подати у форматі з рухомою комою[ред. | ред. код]

Діапазон чисел, які можна записати цим способом, залежить від кількості біт, відведених для подання мантиси та показника. На звичайній 32-бітній обчислювальній машині, що використовує подвійну точність (64 біти), мантиса становить 1 біт знак + 52 біти, показник — 1 біт знак + 10 біт. Таким чином отримуємо діапазон приблизно від 4,94×10-324 до 1.79×10308 (від 2−52 × 2−1022 до ~ 1 × 21024). В стандарті IEEE 754 декілька значень цього типу зарезервовано для подання спеціальних чисел. До них належать значення NaN (Not a Number — «не число») і +/-INF (Infinity, нескінченність), які утворюються внаслідок операцій на зразок ділення на нуль нуля, додатних та від'ємних чисел. Також сюди потрапляють денормалізовані числа, в яких мантиса менша від одиниці. У спеціалізованих пристроях (наприклад GPU) підтримка спеціальних чисел часто відсутня. Існують програмні пакунки, в яких обсяг пам'яті виділений під мантису та показник задається програмно, і обмежується лише обсягом доступної пам'яті комп'ютера.

Точність Одинарна Подвійна Розширена
Розмір (байти) 4 8 10
Число десяткових знаків ~7.2 ~15.9 ~ 19.2
Найменше значення (>0), денормалізоване 1,4×10-45 5,0×10-324 1,9×10-4951
Найменше значення (>0), нормалізоване 1,2×10-38 2,3×10-308 3,4×10-4932
Найбільше значення 3,4 ×10+38 1,7 ×10+308 1,1 ×10+4932
Поля S-E-F S-E-F S-E-I-F
Розміри полів 1-8-23 1-11-52 1-15-1-63
  • S — знак, E  — показник степеня, I — ціла частина, F — дробова частина
  • Так само, як і для цілих, знаковий біт — старший.

Машинний епсилон[ред. | ред. код]

Докладніше: Машинний епсилон

На відміну від чисел з фіксованою комою, сітка чисел, яку здатна відобразити арифметика з рухомою комою, нерівномірна: вона густіша для чисел з малими порядками та рідша для чисел з великими порядками. Але відносна похибка запису чисел однакова і для малих чисел, і для великих. Тому можна ввести поняття машинного епсилону.

Машинним епсилоном називається найменше додатне число ε таке, що (знаком позначено машинне додавання). Грубо кажучи, числа a і b, для яких , машина не розрізняє.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. number // Англійсько-український словник з математики та інформатики 2010 р. (Є. Мейнарович, М. Кратко).
  2. number // Англійсько-українсько-англійський словник наукової мови (фізика та споріднені науки). Частина І англійсько-українська 2010 р. (О. Кочерга, Є. Мейнарович).
  3. число // Українсько-англійський словник з радіоелектроніки 2015 (Богдан Рицар, Леонід Сніцарук, Роман Мисак).

Посилання[ред. | ред. код]

Література[ред. | ред. код]

  • Н. А. Криницький, Г. А. Миронов, Г. Д. Фролов. Програмування. — М. : Державне видавництво фізико-математичної літератури, 1963. — 384 с.
  • Генрі С. Воррен, мл. Глава 15. Числа з рухомою точкою // Алгоритмічні трюки для програмістів = Hacker's Delight. — М. : Вільямс, 2007. — С. 288. — ISBN 0-201-91465-4.