Число з рухомою комою
Число з рухомою комою[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, для яких , машина не розрізняє.
Див. також
Примітки
- number // Англійсько-український словник з математики та інформатики 2010 р. (Є. Мейнарович, М. Кратко).
- number // Англійсько-українсько-англійський словник наукової мови (фізика та споріднені науки). Частина І англійсько-українська 2010 р. (О. Кочерга, Є. Мейнарович).
- число // Українсько-англійський словник з радіоелектроніки 2015 (Богдан Рицар, Леонід Сніцарук, Роман Мисак).
Посилання
Література
- Н. А. Криницький, Г. А. Миронов, Г. Д. Фролов. Програмування. — М. : Державне видавництво фізико-математичної літератури, 1963. — 384 с.
- Генрі С. Воррен, мл. Глава 15. Числа з рухомою точкою // Алгоритмічні трюки для програмістів = Hacker's Delight. — М. : Вільямс, 2007. — С. 288. — ISBN 0-201-91465-4.
Біт |
---|
Застосунок |
Точність двійкової рухомої коми |
Точність десяткового числа з рухомою комою |
|