Типи з плаваючою комою (такі як Одинарний та Подвійний) представлені в пам'яті знаком, мантісою та експонентом. Розгляньте це як наукове позначення:
Sign*Mantissa*Base^Exponent
Вони - як ви можете очікувати - використовують базу 2. Є інші налаштування, які дозволяють представляти нескінченність і NaN, а показник зміщений (повернеться до цього), і стенограма для мантіси (повернеться до цього теж) . Шукайте стандарт IEEE 754, який охоплює його представлення та операції для отримання більш детальної інформації.
Для наших цілей ми можемо уявити це як двійкове число "mantissa" та "показник", який підказує, куди слід поставити десятковий роздільник.
У випадку з одиноким, у нас є 1 біт для знака he, 8 для експонента і 23 для mantissa.
Тепер справа в тому, що ми будемо зберігати мантію з найзначнішої цифри. Пам’ятайте, що всі нулі зліва не стосуються. І даючи, що ми працюємо у двійковій формі, ми знаємо, що найзначніша цифра - 1 ※. Ну, оскільки ми це знаємо, зберігати його не треба. Завдяки цій стенограмі ефективний діапазон мантіси становить 24 біта.
※: Якщо число, яке ми зберігаємо, дорівнює нулю. Для цього у нас будуть всі біти встановлені в нуль. Однак, якщо ми спробуємо інтерпретувати, що під описом, який я дав, у вас буде 2 ^ 24 (неявний 1), помножений на 1 (2 на силу показника 0). Отже, щоб виправити це, показник нуля - це особливе значення. Існують також спеціальні значення для зберігання нескінченності та NaN в експоненті.
Відповідно до зміщення експонента - окрім уникнення спеціальних значень - його зміщення дозволяє розмістити десяткову точку до початку мантіси або після її закінчення, не потребуючи позначення експонента.
Це означає, що для великих чисел тип з плаваючою комою поставить десяткову точку за межі кінця мантіси.
Пам’ятайте, що мантіса - це 24-бітове число. Він ніколи не представлятиме 25-бітове число ... у нього немає цього додаткового біта. Таким чином, одинарний не може розрізняти 2 ^ 24 і 2 ^ 24 + 1 (це перші 25 бітові числа, і вони відрізняються від останнього біта, який не представлений в одиничному).
Таким чином, для цілих чисел діапазон одиничного становить -2 ^ 24 до 2 ^ 24. І намагаючись додати 1 до 2 ^ 24, це призведе до 2 ^ 24 (тому що, що стосується типу, 2 ^ 24 і 2 ^ 24 + 1 мають однакове значення). Спробуйте в Інтернеті . Ось чому відбувається втрата інформації при перетворенні з цілого на одиничне. І тому також цикл, який використовує одинарний чи подвійний, насправді може бути нескінченним циклом, не помічаючи вас.