Типи float і double - студопедія
Насправді тип char - не що інше, як тип цілочисельних даних найкоротшого розміру (діапазон від 0 до 255 або від -128 до +127; ці варіанти, як і в разі int, можна вказати за допомогою кваліфікаторів типу: unsigned char і signed char). Однак на практиці цей тип зазвичай використовують для подання символьних даних - букв, цифр, розділових знаків, знаків математичних операцій, спеціальних символів на зразок $, , @ і т.д.
Сукупність усіх можливих символів утворює алфавіт. Алфавіт - це упорядкований набір символів, тобто для кожного символу (крім, можливо, першого і останнього) відомо, який символ йому передує і який є наступним. Впорядковуючи один і той же набір символів різними способами, ми отримаємо різні алфавіти. Тим більше різними будуть алфавіти, що складаються з розрізняються наборів символів.
Якщо заданий алфавіт (тобто набір n символів і спосіб їх упорядкування), то можна пронумерувати символи по порядку від 0 до n-1. Тоді на будь-який символ алфавіту можна послатися, вказавши його порядковий номер. Саме так і представляються символьні дані в комп'ютері - замість самих символів зберігаються їх порядкові номери в алфавіті (звані кодами символів). Коди залежать від конкретного способу упорядкування символів, або від їх кодування. Якщо можливі різні кодування, то для правильної інтерпретації символьних даних необхідно знати, який саме кодуванні вони відповідають.
Числові величини, які можуть містити дробову частину, в комп'ютері представляються у вигляді чисел з плаваючою точкою. Таке число зберігається у вигляді двох складових частин - мантиси і порядку. що відповідає запису:
Тут m - мантиса, p - порядок, Q - основа системи числення. Порядок завжди є цілим числом (позитивним або негативним). Мантиса - це значуща частина числа, вона може бути правильною або змішаної дробом. Машинні числа представляються в двійковій системі, так що для них Q = 2.
Оскільки загальний розмір пам'яті, що відводиться для зберігання одного числа, фіксований, то значення числа можна представити лише з обмеженою точністю. Істинне значення округляється до такого числа цифр, яке можливо зобразити за певного розміру мантиси. Тому числа з плаваючою точкою в більшості випадків містять деяку похибка, яка називається помилкою округлення.
Безліч значень для типу з плаваючою точкою характеризується діапазоном (залежних від діапазону можливих значень порядку) і точністю (залежить від розміру мантиси).
Більшість процесорів вміють працювати щонайменше з двома різновидами (або форматами) чисел з плаваючою точкою, які розрізняються за розміром, а отже, за діапазоном і точності. Тому в мові C передбачені два базових типу з плаваючою крапкою:
float - числа з плаваючою точкою звичайної точності (4 байта)
double - числа з плаваючою точкою подвоєної точності (8 байт)
Зазначені тут розміри є типовими, але вони не обов'язково будуть такими на будь-якому комп'ютері. Характеристики цих типів для процесорів x86:
float - 4 байта, 1.175 × 10 - 38 £ | x | £ 3.403 × 10 38. | Dx / x | £ 1.192 × 10 - 7
double - 8 байт, 2.225 × 10 - 308 £ | x | £ 1.797 × 10 308. | Dx / x | £ 2.220 × 10 - 16
Якщо в програмі знадобляться конкретні значення кордонів діапазону і відносної точності значень типів float і double, то краще використовувати не наведені вище величини (які справедливі для процесорів x86), а стандартні символічні константи, певні в заголовки float.h за допомогою #define:
FLT_MIN, FLT_MAX, FLT_EPSILON - для типу float
DBL_MIN, DBL_MAX, DBL_EPSILON - для типу double
Тоді текст програми не буде «прив'язаний» лише до одного різновиду процесорів.
Так як деякі процесори вміють працювати більш ніж з двома форматами чисел з плаваючою точкою (наприклад, буває «розширена» або «учетверенное» точність), то в стандарті мови C допускається використання квалічікатора long не тільки з типом int, а й з double. Чи буде тип long double справді володіти більш широким діапазоном і точністю в порівнянні з double, залежить від можливостей процесора, а також від рішення, прийнятого розробниками компілятора. Так, у багатьох сучасних компіляторах [2] для процесорів сімейства Intel x86 long double не відрізняється від double, хоча процесор вміє працювати з числами розширеної точності розміром 10 байт (80 розрядів). Для кордонів діапазону і точності представлення чисел типу long double в заголовки float.h визначені стандартні константи LDBL_MIN, LDBL_MAX і LDBL_EPSILON.
[1] У російськомовній літературі компоновку називають ще складанням або зв'язуванням. Зустрічається також термін «редагування зв'язків».
[2] Виняток становлять компілятори фірми Borland.