Є дві причини, чому вам слід перейматися різними числовими типами даних.
1. Збереження пам’яті
for(long k=0;k<=10;k++)
{
//stuff
}
Навіщо використовувати довгий, коли це так само легко може бути цілим чи навіть байтом? Ви дійсно збережете кілька байтів пам'яті, зробивши це.
2. Числа з плаваючою комою і цілі числа зберігаються по-різному в комп'ютері
Припустимо, у нас є число 22, збережене в цілому. Комп'ютер зберігає це число в пам'яті у двійковій формі як:
0000 0000 0000 0000 0000 0000 0001 0110
Якщо ви не знайомі з двійковою системою чисел, це може бути представлено в наукових позначеннях як: 2 ^ 0 * 0 + 2 ^ 1 * 1 + 2 ^ 2 * 1 + 2 ^ 3 * 0 + 2 ^ 4 * 1 + 2 ^ 5 * 0 + ... + 2 ^ 30 * 0. Останній біт може або не може бути використаний для вказівки, чи число негативне (залежно від того, чи є тип даних підписаним чи непідписаним).
По суті, це лише підсумовування значення 2 ^ (бітове місце) *.
Це змінюється, коли ви посилаєтесь на значення, що містять десяткову точку. Припустимо, у вас є число 3,75 у десятковій частині. Це називається 11.11 у двійковій формі. Ми можемо представити це як наукове позначення як 2 ^ 1 * 1 + 2 ^ 0 * 1 + 2 ^ -1 * 1 + 2 ^ -2 * 1 або, нормалізовано, як 1,111 * 2 ^ 2
Однак комп'ютер не може зберігати це: він не має явного способу вираження цієї двійкової точки (версія системи двійкових чисел десяткової крапки). Комп'ютер може зберігати лише 1 та 0. Тут надходить тип даних з плаваючою комою.
Якщо припустити, що розмір (float) становить 4 байти, то у вас є 32 біти. Першому біту присвоюється "бітовий знак". Немає підписаних поплавців чи парних пар. Наступні 8 біт використовуються для "експонента", а остаточні 23 біти використовуються як "significand" (або іноді їх називають "mantissa"). На прикладі 3,75, наш показник буде 2 ^ 1, а наше значення - 1,111.
Якщо перший біт дорівнює 1, число від’ємне. Якщо ні, позитивний. Експонент модифікується чимось під назвою "зміщення", тому ми не можемо просто зберігати "0000 0010" як показник. Зсув для числа однієї точності з плаваючою точкою - 127, а зміщення для подвійної точності (саме тут подвійний тип даних отримує свою назву) - 1023. Остаточні 23 біти зарезервовані для означенняі. Значення - це просто значення ПРАВО нашої бінарної точки.
Нашим показником буде зміщення (127) + показник (1) або представлене у двійковій формі
1000 0000
Нашим значенням буде:
111 0000 0000 0000 0000 0000
Тому 3,75 представлено у вигляді:
0100 0000 0111 0000 0000 0000 0000 0000
Тепер давайте розглянемо число 8, представлене як число з плаваючою комою і як ціле число:
0100 0001 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 1000
Як у світі комп'ютер збирається додавати 8,0 і 8? Або навіть примножувати їх !? Комп'ютер (точніше, комп'ютери x86) мають різні частини процесора, які додають числа з плаваючою комою та цілі числа.