5.4. Арифметика плаваючою точки
Арифметика чисел з плаваючою точкою реалізує основні математичні операції і обчислення на комп'ютері. Завдяки наявності типів даних з плаваючою точкою коректно реалізуються операції ділення будь-яких чисел. Однак на деякі операції. як і на максимальні і мінімальні значення чисел, накладаються обмеження. Про ці обмеження буде сказано нижче.
Хоча арифметика чисел з плаваючою точкою не є головною темою цього посібника, необхідно ознайомитися з основами її роботи. При першому прочитанні Ви можете пропустити цей розділ.
5.4.1. Подання чисел з плаваючою точкою
Число з плаваючою точкою є дійсне число, яке має цілу частину і дробову частину, що представляє послідовність нулів і одиниць (тобто звичайні числа, що виходять в результаті вимірювання). У комп'ютері вони представляються у вигляді мантиси і порядку. Поняття мантиси і порядку дається в шостому класі курсу алгебри середньої школи. Нагадаємо його:
При чисельних обчисленнях зручно користуватися наступною формулою дійсних чисел:
У першому прикладі мантиса дорівнює 0,123, а порядок відповідає числу 3. Разом отримали число 123. У другому прикладі мантиса дорівнює 0.25, а порядок - 10 (вийшло число 2 мільярди 500 мільйонів). Мантиса завжди задає точність, з якою представлені речові числа. Чим кількість розрядів в мантисі більше, тим вище точність розрахунку. У наведеному прикладі мантиса першого числа більше мантиси другого числа, хоча друге число значно більше першого. Порядок визначає "розряд", з якого починається "відлік" початку значення мантиси.
Подання чисел з плаваючою точкою в ЕОМ також відбувається за допомогою нулів і одиниць, однак їх формат відрізняється від формату цілих чисел (див. [40]). Схематично його можна представити таким чином:
Довжина ж машинного представлення чисел з плаваючою точкою дорівнює 4, 8 і 10 байт. При цьому число в регістрі довжиною 4 байта має тип float (або real), в регістрі довжиною 8 байт - double, в регістрі довжиною 10 байт - long double.
У таблиці 5.5 представлені максимальні і мінімальні значення, що приймаються числами з плаваючою точкою в регістрах з різною розрядністю. У таблиці 5.6 дається відповідність між розрядністю регістрів чисел з плаваючою точкою і їх позначеннях в мовах Quick Basic, Сі, C ++ і Java.
Таблиця 5.5. Мінімальні і максимальні значення чисел в регістрах з плаваючою точкою
5.4.2 Арифметика чисел з плаваючою точкою
З даними у вигляді чисел з плаваючою точкою можливі наступні операції:
- складання;
- віднімання;
- множення;
- розподіл;
- зведення в ступінь;
- знаходження залишку від ділення (не у всіх мовах);
- зміна знака числа;
- інкремент числа;
- декремент числа;
- відношення "більше" і "менше";
- а також доступні інші алгебраїчні функції.
5.4.3. Особливі ситуації при роботі з числами з плаваючою точкою
Арифметика з плаваючою точкою має наступні програмні переривання:
- поділ на нуль (divide by zero) - спроба ділення на нуль;
- переповнення мантиси (overflow) - позитивне або негативне число в регістрі виходить за свої максимальні значення;
- переповнення порядку - в результаті множення порядок перевищив своє максимальне або мінімальне значення;
- зникнення порядку - обнуління мантиси при мінімальному значенні порядку.
Можливі й інші переривання.
Примітка. Оскільки регістри для цілочисельних операцій і операцій з плаваючою точкою не тільки різні, але і обробляються різними підсистемами процесора, то і ознаки операцій для них генеруються незалежно в різних регістрах. Це дозволяє гнучко управляти програмними перериваннями. але це відноситься вже до системного програмування.
5.5. резюме
Отже, після прослуховування цієї лекції Ви дізналися:
- Існує два типи даних: "машинні" (які визначаються архітектурою обчислювальних машин) і "призначені для користувача" (певні системними і прикладними програмістами). Перший тип даних представлений в лекціях "Типи даних" і "Примітивні символьні дані"], другий - в "Інші типи даних" і "Змінні Perl". В даному описі не розглядаються класи - це прерогатива окремої теми.
- Концепція "типів даних" реалізована в більшості "справжніх" мов програмування, але відсутня в "скриптових" мовах (мовах написання макросів).
У наступній лекції Ви познайомитеся з "примітивними символьними" даними.