JavaRush/Java блог/Random UA/Речові числа у пам'яті комп'ютера. Пояснення.
Marianna
9 рівень

Речові числа у пам'яті комп'ютера. Пояснення.

Стаття з групи Random UA
учасників
Добридень! Вивчаючи лекцію "Нюанси роботи з речовими числами" першого квесту (розділ 2. Пристрій чисел з плаваючою точкою) та додаткові лекції на тему, багато хто, мабуть, зіткнувся з безліччю питань на цю тему. Спочатку я постаралася дати сама собі необхідні відповіді, а тепер пропоную їх вам на допомогу для повноцінного розуміння в послідовному логічному порядку. 1. Десяткові та двійкові системи числення. 1.1 Десятична система числення — одна з найпоширеніших систем, саме їй ми користуємося за будь-яких НЕ комп'ютерних математичних обчислень у школі, у вузі, у житті. У ній використовуються цифри 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 (арабські) – всього 10 цифр. Також є римський запис чисел, який, однак, практично не застосовується зараз. У десятковій системі рахунок ведеться одиницями, десятками, сотнями, тисячами, десятками тисяч, сотнями тисяч, мільйонами тощо. - Іншими словами, це все розряди числа. Розряд числа – це позиція (місце) цифри у записі числа. Наймолодший розряд натуральних чисел (і найменший ) - це розряд одиниць (найправіший) . Чому він найменш значущий? Тому що, відкинувши одиничний розряд числа, саме число зміниться мінімально (наприклад, числа 345 та 340). Далі другий розряд – це розряд десятків тощо. Що це все означає? Візьмемо будь-яке ціле число в десятковій системі і розкладемо його на розряди . 3297 = 3*1000 + 2*100 + 9*10 + 7 Таким чином отримуємо, що в числі 3297 міститься 3 одиниці четвертого розряду (тобто 3 тисячі), 2 одиниці третього розряду (2 сотні), 9 одиниць другого розряду (9 десятків) та 7 одиниць першого розряду . Іншими словами, це число три тисячі двісті дев'яносто сім і воно є відповідно позиційним . А що ж із розрядами дробових (речових) чисел? Розряди дробових чисел (їх дробової частини) називаються: десяті, соті, тисячні, десятитисячні тощо. Чим далі від коми (від цілої частини числа) розряд - тим менш значимий (відкинувши його, значення числа мало зміниться). Для прикладу візьмемо будь-яке дробове число, подане у вигляді десяткового дробу: 25,076 = 2*10 + 5 +0*0,1 + 7*0,01 +6*0,001 Таким чином, отримуємо, що в дробовому числі 25,076 міститься 2 десятки, 5 одиниць, 0 десятих, 7 сотих та 6 тисячних. У десятковій системі використовуються 10 цифр і кратні 10 розряди - звідси і назва "десяткова". 1.2 Двійкова система числення - система числення, що застосовується практично у всіх сучасних комп'ютерах та інших обчислювальних електронних пристроях. Для запису чисел у ній використовуються лише дві цифри - 0 і 1. Щоб не плутати, в якій системі числення записано число, його постачають покажчиком праворуч внизу (він є основою системи числення ), наприклад: 1000₁₀ 1000₂ Тут перше число - звична нам тисяча десятковій системі, а нижнє - це число у поданні двійкової системи і так само воно в десятковій системі... 8 ! Як і в десятковій системі, у двійковій системі числа також розбиваються на розряди . Кожна цифра у двійковому числі називається біт (або розряд ). (Якщо комусь цікаво, то чотири біти – це напівбайт (або зошита), 8 біт – байт , 16 біт – слово , 32 біти – подвійне слово ). Нумеруються біти (розряди) також праворуч наліво, починаючи з нуля (на відміну від десяткової системи). Наймолодший , незначний, правий біт має порядковий номер 0 . Далі йде перший біт, другий і т.д., чим старший біт - тим він значущий (за аналогією зі зрозумілою нам десятковою системою - якщо з числа 1455 викинути одиниці, залишиться число 1450 - майже рівне початковому. А ось якщо викинути сотні, залишиться число 1050, яке вже далеке від початкового значення, тому що розряд сотень є куди більш значущим (старшим), ніж розряд одиниць). приклад. НЕ ЧИТАТИ ПОКИ:))) Речові числа в пам'яті комп'ютера.  НА ДОБРОТЦІ!!!  - 2 Внизу червоним кольором пронумеровані біти цього дрібного двійкового числа - всього у нас вийшло 18 бітів (розрядів) даного числа. Забігаючи наперед, хочу відзначити, що в пам'яті комп'ютера дробові числа зберігаються зовсім по-іншому - про це буде розказано далі. А поки давайте навчимося переводити числа з однієї системи числення до іншої. 2. Переведення цілих і дробових чисел із десяткової системи в двійкову та навпаки. 2.1 Переведення з десяткової системи до двійкової. 2.1.1 Цілі числа. Для того, щоб перевести ціле десяткове число в двійкову систему числення, необхідно розділити це число на 2, записати залишок від поділу (він завжди дорівнює 0 або 1, залежно від того, парне чи непарне), а результат поділу знову поділити на 2 , знову записати залишок від поділу (0 або 1), а результат від другого поділу знову поділити на 2. Так продовжувати доти, поки результат поділу не буде рівним одиниці. Далі запишемо всі отримані нулі та одиниці у зворотному порядку , починаючи з останнього результату поділу, завжди рівного 1. Важлива примітка. Кінцевим результатом послідовного розподілу будь-якого цілого числа на 2 завжди в результаті буде одиниця (1) ! Якщо результат більше 1 – ми продовжуємо ділити цей результат на 2, поки не отримаємо одиниць у результаті. А нулем (0) результат поділу на 2 може бути лише в одному випадку - це поділ самого нуля на 2. Приклад. Переведемо число 145 із десяткової системи у двійкову. 145/2 = 72 (залишок 1 ) 72/2 = 36 (залишок 0 ) 36/2 = 18 (залишок 0 ) 18/2 = 9 (залишок 0 ) 9/2 = 4 (залишок 1 ) 4/2 = 2 (Залишок 0 ) 2/2 = 1 (залишок 0 ) Тепер "збираємо" наше двійкове число у зворотному порядку. Отримуємо число 10 010 001. Готово! Цікавий аспект 1. Переведемо число 1 з десяткової системи в двійкову. У двійковій системі це число також буде записано як 1. Адже кінцевий результат поділу на 2, який має дорівнювати 1, вже дорівнює самому числу 1. 1₁₀ = 1₂ Цікавий нюанс 2. Переведемо число 0 із десяткової системи в двійкову. У двійковій системі це число також буде записано як 0. 0₁₀ = 0₂ 2.1.2 Дробові числа. А як перевести дробові числа у двійкову систему? Щоб перевести десятковий дріб у двійкову систему числення, необхідно: а) цілу частину дробу перевести в двійкову систему згідно з вивченим алгоритмом у пункті 2.1.1 б) дробову частину дробу помножити на 2 , записати отриману цифру результату ДО коми (завжди дорівнює 0 або 1, що логічно), далі ТІЛЬКИ дробову частину отриманого результату знову помножити на 2, знову записати отриману цифру результату до коми (0 або 1) і так далі, поки дробова частина результату множення не дорівнює 0 або до необхідного кількості знаків після коми (потрібної точності ) (рівно кількості множень на 2). Потім необхідно записати отриману послідовність записаних нулів і одиниць за Порядком після точки , що розділяє цілу і дробову частини речового (дробного) числа. Приклад 1. Переведемо число 2.25 (2 цілих 25 сотих) із десяткової системи до двійкової. У двійковій системі дріб дорівнюватиме 10.01 . Як ми це здобули? Число складається з цілої частини (до точки) – це 2 і дробової частини – це 0.25. 1) Переклад цілої частини: 2/2 = 1 (залишок 0 ) Ціла частина буде 10 . 2) Переклад дробової частини. 0.25*2= 0.5 (0) 0.5*2= 1.0 (1) Дробова частина стала в результаті послідовного множення на 2 стала дорівнює 0. Припиняємо множення. Тепер "збираємо" дробову частину ПО ПОРЯДКУ - отримуємо 0.01 у двійковій системі. 3) Складаємо цілу та дробову частини - отримуємо, що десятковий дріб 2.25 дорівнюватиме двійковому дробу 10.01 . Приклад 2. Переведемо число 0.116 із десяткової системи у двійкову. 0.116*2= 0.232 (0) 0.232*2= 0.464 (0) 0.464*2= 0.928 (0) 0.928*2= 1.856 (1) //відкидаємо цілу частину даного результату 0.856 = 1.712 (1) // відкидаємо цілу частину даного результату 0.712 * 2 = 1.424 (1) // відкидаємо цілу частину даного результату 0.424 * 2 = 0.848 (0) Як ми бачимо, множення продовжується і продовжується , Частина результат не стає рівною 0. Тоді вирішимо, що ми переведемо нашу десяткову дріб в двійковий з точністю до 7 символів (біт) після точки (у дробовій частині). Згадуємо, що ми вивчали про малозначні розряди - що далі розряд (біт) від цілої частини, то легше ми можемо їм знехтувати (пояснення у розділі 1 лекції, хто забув). Отримуємо двійковий дріб 0.0001110 з точністю до 7 біт після крапки. 2.2 Переведення з двійкової системи до десяткової. 2.2.1 Цілі числа. Для того, щоб перекласти цілечисло з двійкової системи числення в десяткову, необхідно розбити це число на розряди (біти) і кожен розряд (біт) помножити на число 2 певною позитивною мірою ( даний ступінь починає відлік праворуч наліво від наймолодшого (правого біта) і починається з 0 ) . Іншими словами, ступінь двійки дорівнює номеру даного біта (але це негласне правило можна використовувати тільки у разі перекладу цілих чисел, так як у дробових чисел нумерація бітів починається в дрібній частині, яка переводиться в десяткову систему по-іншому ). Далі потрібно скласти одержані твори. приклад. Перекладемо двійкове число 110011 у десяткову систему числення. 110011₂ = 1*2⁵ + 1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º = 32 +16 +0 + 0 + 2 + 1 = 51₁₀ У результаті отримуємо число 51 у двійковій системі . Для інформації нижче наведена таблиця перших ступенів числа 2 . НЕ ЧИТАТИ ПОКИ:))) Речові числа в пам'яті комп'ютера.  НА ДОБРОТЦІ!!!  - 5 ! Зверніть увагу, нульовий рівень числа завжди дорівнює 1. 2.2.2 Дробові числа. Для того, щоб перевести двійкове дробове (речове) число в десяткове , необхідно: а) перевести його цілу частину в десяткову згідно з алгоритмом з пункту 2.2.1 ; б) перевести його дробову частину в такий спосіб. Потрібно уявити дробову частину у вигляді суми творів розрядів на двійку , зведену в певний негативний ступінь (ступінь для першого розряду після крапки (після цілої частини дробу) дорівнюватиме -1, для другого розряду після крапки дорівнює -2 і т.д.) Результат цієї суми і буде дробовою частиною числа в десятковій системі. приклад. Перекладемо число 10111.01 у двійкову систему. 10111.01₂ = (1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º) . (0*2ˉ¹ + 1*2ˉ²) = (16 + 0 + 4 + 2 + 1) . (0 + 0.25) = 23.25₁₀ У результаті отримуємо число 23.25 у десятковій системі числення. Таблиця перших негативних ступенів 2 наведена нижче. НЕ ЧИТАТИ ПОКИ:))) Речові числа в пам'яті комп'ютера.  НА ДОБРОТЦІ!!!  - 7 2.2.3 Загальна формула переведення чисел із двійкової системи до десяткової. Наведемо загальну формулу переведення чисел із двійкової системи до десяткової (і цілої, і дробової частин). НЕ ЧИТАТИ ПОКИ:))) Речові числа в пам'яті комп'ютера.  НА ДОБРОТЦІ!!!  - 4 де A - число в двійковій системі числення; основа системи числення дорівнює 2 (означає, кожен біт множиться на 2 ступеня); n- Кількість цілих розрядів (бітів) ; m - кількість дробових розрядів (бітів) числа . Червоним виділено перший від розділяючої точки біт цілої частини. Він завжди множиться на 2 у нульовому ступені. Наступний перед ним (ліворуч) біт множиться на 2 у першому ступені і т.д. Зеленим виділено перший від розділяючої точки біт дробової частини. Він завжди множиться на 2 мінус першого ступеня. Наступний за ним (направо) біт множиться на 2 мінус другого ступеня і т.д. 3. Експонентна форма запису числа: нормалізована форма запису в обох системах. Мантіса, експонента, ступінь експонентів. 3.1 Експонентна форма запису числа. Раніше ми вивчабо докладну схему запису позиційних чисел за розрядами. Візьмемо число 0.0000000000000000000016 . Воно має дуже довгий запис у стандартному вигляді. А в експоненційному вигляді воно виглядатиме так: 1.6 * 10ˉ²¹ Так що ж таке експоненційна форма числа і як уявити число у цій формі? Експоненційний запис числа - це подання дійсних чисел у вигляді мантиси та порядку . Зручна для представлення дуже великих і малих чисел, а також для уніфікації їх написання. N = M * pⁿ де N - записуване число, М - мантиса числа, p - основа (рівно підставі системи числення даного числа), n (ціле) - порядок (ступінь, може бути позитивною та негативною), p у ступеню n - характеристика числа (експонента, тобто основа, зведена у ступінь (порядок)). Важливий аспект. Якщо ціла частина десяткового числа відмінна від 0 , то порядок (ступінь) експоненти буде позитивним , якщо ціла частина дорівнює 0 - ступінь експоненти буде негативною . 3.2 Нормальна та нормалізована форма запису чисел. Нормальною формою числа називається така форма, в якій мантіса (без урахування знака) знаходиться на напівінтервалі [0,1), тобто 0<= M < 1. Така форма запису має недолік: деякі числа записуються неоднозначно (наприклад, 0,0001 можна записати як 0,000001*10², 0,00001⋅10¹, 0,0001⋅10º, 0,001⋅10ˉ¹ і так далі). Тому поширена (особливо в інформатиці) інша форма запису – нормалізована, в якій мантиса десяткового числа набуває значення від 1 (включно) до 10 (виключаючи), тобто 1<= M < 10 (аналогічно, мантиса двійкового числа набуває значення від 1 до 2 ). Інакше кажучи, мантиса в десятковій системі повинна бути дробове число від 1.0 (включно) до 10 (виключаючи) , тобто. у цілій частині мантиси має бути одна-єдина цифра, а дробова частина математично не обмежена. Гідність нормалізованої форми в тому, що таким чином будь-яке число (крім 0) записується єдиним чином. Недолік полягає в тому, що у такому вигляді неможливо уявити 0, тому подання чисел в інформатиці передбачає спеціальну ознаку (біт) для числа 0. 3.3 Приклади запису десяткових чисел в нормалізованій експоненційній формі. Давайте розглянемо приклади. Приклад 1. Запишемо десяткове число 1015000 (один мільйон п'ятнадцять тисяч) в нормалізованому експоненційному вигляді. Система числення цього числа десяткова, тому основа буде 10 . Виділимо мантису . Для цього представимо число у вигляді дробу, дробова частина якого дорівнюватиме, відповідно, нулю (оскільки число ціле): 1000000.0. Якщо ціла частина числа більше 0 , то рухаємо точку вліво від її початкового положення (всередину цілої частини) доти, доки в цілій частині не залишиться одна-єдина цифра . Після неї ставимо крапку. Відкидаємо незначні нулі (наприкінці числа). Отримуємо мантису числа, що дорівнює 1.015 . Визначимо ступінь (порядок) основи числа. На скільки позицій ліворуч зрушилася наша точка, що розділяє цілу і дробову частини? На шість позицій. Отже, порядок дорівнюватиме 6 . При цьому порядок позитивний (рухали крапку в цілій частині числа, що не дорівнює 0). Підсумковий запис у нормалізованому вигляді: 1.015*10⁶ . Ми можемо записати це число і в такому варіанті: 1.015Е6 (де Е6 - це експонента десяткового числа, тобто 10 6 ступеня). Давайте перевіримо себе. Експонентний запис числа являє собою щось інше, як добуток числа (мантиси) на інше число (експоненту). Що буде, якщо помножити 1015 на 10⁶? 1.015 * 10⁶ = 1.015 * 1000000 = 1015000 . Все вірно. Такий підхід (нормалізований) допомагає створити однозначний записчисла в експоненційному вигляді, як зазначено вище. Приклад 2. Запишемо десяткове речове число 0.0098 у нормалізованому вигляді. Виділимо основу числа - воно дорівнює 10 (десяткова система числення). Виділимо мантису числа - вона дорівнює 9.8 (ціла частина числа дорівнює нулю, значить рухаємо точку вправо до першої значущої цифри (що в інтервалі від 1 до 9 включно). Визначаємо порядок числа - ми посунули точку на три позиції, значить порядок дорівнює 3. Позитивний він або негативний?Так як ми рухали точку вправо (у дробовій частині числа), то порядок (ступінь) буде негативним.Подсумковий запис числа в нормалізованому вигляді - це 9.8 * 10? або 9.8Е-3 . Давайте знову перевіримо себе. 9.8 * 10ˉ³ = 9.8 * 0.001 = 0.0098 Приклад 3. Запишемо десяткове речове число 3.56 в нормалізованому вигляді.Виділимо основу числа - воно дорівнює 10 (десяткова система числення) . (Ціла частина числа становить одну-єдину цифру, не рівну 0. Значить, точку нікуди зрушувати не треба, саме число і буде мантисою.) Виділимо порядок підстави.На яке число потрібно помножити мантису, рівну самому числу, щоб вона не змінилася? на одиницю. Отже, порядок дорівнюватиме нулю. Підсумковий запис числа у нормалізованому вигляді - це 3.56*10º або 3.56Е0. 4. Зберігання дійсних чисел у пам'яті комп'ютера: float і double. 4.1 Типи float та double. Приступаємо до ключового розділу нашої лекції. Як ми вже знаємо, Java має два типи дійсних чисел: float і double . Тип float займає в пам'яті комп'ютера 32 біта і може набувати значення в інтервалі [3.4E-38; 3.4E+38) (іншими словами, в інтервалі від 3.4*10ˉ³⁸ (включно) до 3.4*10³⁸ (за винятком)). Важливий аспект 1. Числа типу float можуть бути як позитивними, так і негативними. Даний діапазон представлений вище для позначення модулів чисел, що входять в діапазон float. Важливий нюанс 2. 10³⁸ приблизно дорівнює 2¹²⁷ , відповідно 10 ˉ³⁸ приблизно дорівнює 2ˉ¹²⁷ . Таким чином, інтервал модулів значень чисел float можна записати у вигляді [3.4*2ˉ¹²⁷; 3.4*2¹²⁷). Тип double займає вдвічі більше пам'яті комп'ютера 64 біта і може набувати десяткові значення в інтервалі [-1.7E+308; 1.7E+308) відповідно. 4.2 Експонентна нормалізована форма двійкових чисел. Ми знаємо, що у пам'яті комп'ютера числа зберігаються у двійковому вигляді. Отже, візьмемо число 1560.256 (тип float) і переведемо його в двійкову систему у позиційному вигляді: 11000011000.01000001100 . Можна подумати, що саме так воно і зберігатиметься в пам'яті комп'ютера. Але це не так! У пам'яті комп'ютера типи float і double ( речові типи з плаваючою точкою ) зберігаються в експоненційному нормалізованому вигляді , але основою ступеня обрано число 2 замість 10. Це пов'язано з тим, що, як сказано вище, всі дані в комп'ютері представлені в двійковій формі (бітами) ). Під число приділяється певна кількість комп'ютерної пам'яті. Представимо позитивне число 15.2 у нормалізованому експоненційному вигляді: 1.52*10¹ . Далее представим его двоичного "близнеца" 1111.00110011001 также в экспоненциальной нормализованной форме записи, пользуясь тем же самым алгоритмом: 1) Основание будет равно 2 2) Мантисса будет равна 1.11100110011001 3) Степень будет положительной и равна 3 (смещение точки на 3 бита влево) в десятковій системі. Переведемо її у двійкову систему: 11 . Таким чином, у двійковому експоненційному нормалізованому вигляді це буде число 1.11100110011001*2¹¹. 4.3 Зберігання експоненційної нормалізованої двійкової форми числа float у пам'яті комп'ютера. Отже, ми розібралися, що речове число зберігатиметься в пам'яті комп'ютера в нормалізованій експоненційній двійковій формі . Як воно буде виглядати в пам'яті? Візьмемо тип float . Під кожну кількість типу float комп'ютер виділяє 32 біти . Вони розподіляються в такий спосіб . На цьому малюнку схематично представлена ​​виділена пам'ять для числа типу float розміром 32 біта в комп'ютері. НЕ ЧИТАТИ ПОКИ:))) Речові числа в пам'яті комп'ютера.  НА ДОБРОТЦІ!!!  - 5 Червоним позначено нумерацію бітів. Зеленим позначено шматок виділеної пам'яті (1 біт) зберігання знака числа. Жовтим позначено шматок виділеної пам'яті для зберігання зміщеного ступеня (порядку) експоненційної форми числа (8 біт). Синімпозначено шматок виділеної пам'яті для зберігання нормалізованої мантиси числа без неявної одиниці (23 біти). Давайте розберемося докладніше. 1) Знаковий біт. Найстарший (перший зліва) біт завжди виділяється під зберігання знака числа (1, якщо число негативне, і 0, якщо число позитивне). Виняток може становити число нуль — у програмуванні нуль може бути негативним, і позитивним . 2) Далі йдуть біти ступеня (порядку) експоненти з основою 2 . І тому виділяють 8 біт. Ступінь експоненти чисел float , як ми знаємо, може бути і негативною (для чисел, ціла частина яких дорівнює 0, див. пункт 3.3), і позитивною (для чисел, ціла частина яких відмінна від нуля) і лежить в межах від 2?²? до 2? ²⁷ . За ідеєю, ми повинні виділити один біт для визначення знака експоненти, як у випадку зі знаковим бітом. Але це не так. Щоб не витрачати біт на визначення знака ступеня, у чисел float додають зміщення до експоненти на половину байта +127(0111 1111). Таким чином, замість діапазону ступенів від 2ˉ¹²⁷ до 2¹²⁷, комп'ютер зберігає діапазон ступенів від 0 до +254 - всі значення ступенів позитивні , зайвий байт на знак витрачати не треба. Виходить, що величина показника ступеня зміщена наполовину можливого значення. Це означає, що для отримання фактичного значення ступеня експоненти необхідно відняти це усунення значення, що зберігається в пам'яті. Якщо збережене в пам'яті значення ступеня експоненти менше усунення (+127), значить ступінь експоненти негативна: це логічно. приклад. Виконаємо зсув негативного ступеня -18 . Додаємо до неї усунення +127, отримуємо значення ступеня +108 (не забуваємо ступінь 0 у розрахунку). Перекладемо ступінь у двійковий вигляд: 1101100 Але на ступінь виділено 8 біт пам'яті, а тут ми отримуємо 7-бітне число. На місце порожнього, незайнятого старшого розряду (біта) комп'ютер додає 0. Підсумок цей ступінь зберігатиметься у пам'яті комп'ютера як 01101100 . Дивимося: +108 < +127, отже, ступінь справді за фактом негативний. Розглянемо наступну цікаву таблицю: У ній наведено всі можливі значення ступенів нормалізованих форм чисел float у двійковій та десятковій системах. Як бачимо, у двійковій системі +127 становить половину цілого байта (8 біт). 3) 23 біти, що залишабося , відводять для мантиси НЕ ЧИТАТИ ПОКИ:))) Речові числа в пам'яті комп'ютера.  НА ДОБРОТЦІ!!!  - 11. Але у нормалізованої двійкової мантиси старший біт (він же ціла частина нормалізованої мантиси) завжди дорівнює 1 (називається неявна одиниця ), оскільки число мантиси лежить в діапазоні 1<=M<2 (а також згадуємо пункт 2.1.1 лекції). Єдиний виняток – число 0. Немає сенсу записувати одиницю у відведені 23 біти і витрачати пам'ять, тому у відведені 23 біти записують залишок від мантиси (її дробову частину). Виходить, що насправді значна частина числа float має довжину 24, з яких зберігається на один біт менше. Важливий аспект. Згадаймо, що з перекладі десяткових дробових чисел у двійкові часто дробова частина у двійковій системі виходила величезної. А у нас лише 32 біти на зберігання числа float. В даному випадку наймолодші, малозначущі розряди двійкового дробу (згадуємо пункт 2.1.2 цієї лекції) не увійдуть у виділену пам'ять і комп'ютер нехтує ними . Точність числа загубиться , але, погодьтеся, мінімально. Іншими словами, точність дробових чисел типу float становить 6-7 десяткових знаків. 4.4 Зберігання експоненційної нормалізованої двійкової форми числа double у пам'яті комп'ютера. Зберігання дійсних чисел типу double здійснюється у пам'яті комп'ютера так само , як і в чисел float, крім деяких характеристик. На число типу double у пам'яті комп'ютера відведено 64 біти. Вони розподіляються так (також по порядку зліва направо): 1) Знаковий біт (див. пункт 4.3). Ми розуміємо, що номер цього біта буде 63 . 2) Ступінь (порядок). На її зберігання у чисел double виділяється 11 біт . Також здійснюється зміщення ступеня, але у чисел double воно дорівнюватиме +1023. 3) Мантісса (значна частина). На її зберігання у чисел double виділяється 52 біти (розряди). Також точно ціла частина мантиси ( неявна одиниця ) у пам'яті не зберігається. Також варто зазначити, що точність дробових чисел типу double становить близько 16 десяткових знаків . 4.5 Приклади представлення речового числа десяткової системи пам'яті комп'ютера. І завершальним пунктом нашої лекції буде приклад переведення дробового числа десяткової системи числення у форму його зберігання пам'яті комп'ютера закріплення розуміння теми. Приклад 1. Візьмемо число-4.25 типу float. Уявімо його в експоненційному нормалізованому вигляді в двійковій системі числення, згадуючи все, що проходабо в цій лекції. 1) Перекладаємо цілу частину числа в двійкову форму: 4/2= 2 (залишок від поділу 0 ) 2/2 = 1 (залишок від поділу 0 ) Ціла частина дорівнюватиме 100 у двійковій системі. 2) Перекладаємо дробову частину числа у двійкову форму. 0.25*2 = 0.5 ( 0 ) 0.5*2 = 1.0 ( 1 ) Дробова частина дорівнюватиме 0.01 у двійковій системі. 3) Таким чином, -4.25₁₀ = -100.01₂ . 4) Переведемо число -100.01₂ в експоненційний нормалізований вид у двійковій системі числення (означає, основа ступеня буде 2). -100.01₂ = -1.0001 *2² Перекладемо значення ступеня з десяткового формату в двійковий . 2/2= 1 (залишок 0 ) Ступінь дорівнює 10₂. Отримуємо, що число -4.25₁₀ у своїй двійковій експоненційній нормалізованій формі дорівнюватиме -1.0001 * 2¹º Запишемо, як це виглядатиме в пам'яті комп'ютера. Знаковий біт дорівнюватиме 1 (число негативне). Усунення експоненти дорівнює 2+127 = 129₁₀ = 10000001₂ У мантиси відкидаємо неявну одиницю, отримуємо 0001000000000000000000 ( незайняті молодші біти заповнюємо нулями ). Підсумок. 1 10000001 00010000000000000000000 - ось таким чином число -4.25 зберігається в пам'яті комп'ютера. Приклад 2. Переведіть число 0.75₁₀ типу float у двійковий формат зберігання пам'яті комп'ютера. Результат повинен бути 0 01111110 100000000000000000000000 . Дякую за увагу.
Коментарі
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Для цієї сторінки немає коментарів.