JavaRush/Java блог/Random/Вещественные числа в памяти компьютера. Объяснение.
Marianna
9 уровень

Вещественные числа в памяти компьютера. Объяснение.

Статья из группы Random
участников
Добрый день! Изучая лекцию "Нюансы работы с вещественными числами" первого квеста (раздел 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) Теперь "собираем" наше двоичное число в обратном порядке. Получаем число 10010001. Готово! Интересный нюанс 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 * 2 = 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). Иными словами, мантиcса в десятичной системе должна представлять собой дробное число от 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 степени). Давайте проверим себя. Экспоненциальная запись числа представляет из себя нечто иное, как произведение числа (мантиссы) на другое число (экспоненту). Что будет, если умножить 1.015 на 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 * 10ˉ³ = 9.8 * 0.001 = 0.0098. Все верно. Пример 3. Запишем десятичное вещественное число 3.56 в нормализованном виде. Выделим основание числа - оно равно 10 (десятичная система счисления). Выделим мантиссу числа - она равна... 3.56 (целая часть числа составляет одну-единственную цифру, не равную 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, значит, степень действительно по факту отрицательная. Рассмотрим следующую интересную таблицу: НЕ ЧИТАТЬ ПОКА:))) Вещественные числа в памяти компьютера. НА ДОРАБОТКЕ!!! - 11 В ней приведены все возможные значения степеней нормализованных форм чисел float в двоичной и десятичной системах. Как мы видим, в двоичной системе +127 как раз составляет половину целого байта (8 бит). 3) Оставшиеся 23 бита отводят для мантиссы. Но у нормализованной двоичной мантиссы старший бит (он же целая часть нормализованной мантиссы) всегда равен 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₂ У мантиссы откидываем неявную единицу, получаем 00010000000000000000000 ( незанятые младшие биты заполняем нулями). Итог. 1 10000001 00010000000000000000000 - вот таким образом число -4.25 хранится в памяти компьютера. Пример 2. Переведите число 0.75₁₀ типа float в двоичный формат хранения в памяти компьютера. Результат должен быть 0 01111110 10000000000000000000000. Благодарю за внимание.
Комментарии (15)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
special
Уровень 8
позавчера, 13:28
формула с ошибкой нету a n-ого
24 февраля, 08:18
Спасибо за проделанную работу! Отличная статья!
Grigoryvvv
Уровень 6
Expert
19 января, 18:36
20.01.24. 4 уровень. Классная лекция. Целый день потратил на изучение данной темы. Зато теперь есть понимание 👍
kddima0 Junior QA в ЦФТ Expert
8 декабря 2023, 16:50
Супер, спасибо
Antares
Уровень 51
27 октября 2023, 07:07
При вычислении значения отрицательной степени -18, если прибавить +127 получается +109, ноль учитывать не нужно. В памяти компьютера будет храниться 01101101. Можете убедиться здесь
zubizuka
Уровень 11
17 мая 2023, 12:29
автор, ты молодец! спасибо за лекцию
Ksenia
Уровень 13
18 марта 2023, 13:49
>Выполним смещение отрицательной степени -18. Прибавляем к ней смещение +127, получаем значение степени +119. это вряд ли.
Marianna
Уровень 9
1 мая 2023, 12:19
Спасибо за поправку! Точно😄 Исправила.
citizenone
Уровень 11
Student
5 марта 2023, 12:18
Крайне познавательное видео, объясняющее просто и наглядно как хранятся числа с плавающей точкой в памяти компьютера, почему теряется точность и тд. тык
Gleb
Уровень 24
Expert
20 февраля 2023, 11:45
вау, спасибо.
linx
Уровень 4
24 января 2023, 22:51
-мне как для новичка оооочень тяжелая тема, -но автор красавчик! -я когда не врубался в формулы и теорию , то понимал на примерах