На Горох
Информатика, 10 класс

§ 29. Хранение в памяти вещественных чисел

"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.

Объяснение темы В оглавлении: § 29. Хранение в памяти вещественных чисел

Кратко о теме

Вещественные числа нужны программам для вычислений с дробями и величинами, которые могут сильно различаться по размеру. Чтобы хранить их в ограниченной памяти, компьютер использует форму с плавающей точкой: число кодируется знаком, мантиссой и порядком. Такой способ охватывает широкий диапазон значений, но конечного количества битов не хватает для точной записи многих чисел. Поэтому при сохранении и вычислениях появляются округления, которые могут влиять на результат.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Вещественное число — число, которое компьютер приближённо представляет конечным набором двоичных разрядов. К таким числам относятся целые, дробные и отрицательные значения. Ограничение числа разрядов нужно учитывать: память не может хранить бесконечную запись.

Число с плавающей точкой — представление числа в виде знака, мантиссы и порядка, при котором положение двоичной точки задаётся порядком. Например, запись ±m·2p позволяет отдельно хранить значащие цифры и масштаб. Так удобно кодировать как очень малые, так и очень большие значения.

Мантисса — значащая часть числа; в нормализованной двоичной записи она содержит ведущую единицу. Например, в записи 1,101₂ эта единица стоит перед точкой. Мантисса нужна, чтобы сохранить цифры, определяющие точное значение внутри выбранного масштаба.

Порядок — целое число, задающее степень основания системы счисления, на которую умножена мантисса. В двоичной системе порядок указывает степень двойки: например, умножение на 23 сдвигает точку вправо на три позиции. Он помогает задавать масштаб числа без хранения длинной последовательности нулей.

Как это устроено

Если записывать все цифры числа подряд, для очень больших значений понадобятся длинные цепочки разрядов, а для очень малых — много нулей после точки. Это было бы неудобно: ячейка памяти имеет ограниченный размер и не могла бы одинаково эффективно хранить значения разных масштабов. Поэтому число представляют как ±m·2p: мантисса хранит значащую часть, а порядок задаёт масштаб. Так один и тот же формат может охватывать широкий диапазон чисел.

Одинаковое значение можно записать с разным положением двоичной точки, но тогда изменится и числовое значение мантиссы. Чтобы значение числа осталось прежним, при сдвиге точки в одну сторону порядок изменяют на противоположное количество позиций. Например, 1101,₂ = 1,101₂·23: точку в мантиссе сдвинули влево на три позиции и умножили её на 2³. Такая нормализация приводит запись к стандартному виду и делает представление более эффективным.

В форматах IEEE 754 ячейку делят на поля: бит знака, биты порядка и биты дробной части мантиссы. Знак отличает положительное число от отрицательного, а поле порядка позволяет задать масштаб. Для нормализованных чисел ведущая единица мантиссы подразумевается, поэтому явно хранят только дробную часть после неё. Это освобождает бит для представления дополнительных значащих цифр.

Сам порядок может быть положительным или отрицательным, но хранить его как обычное целое в поле фиксированного размера неудобно. Поэтому к нему прибавляют смещение: в одинарном формате 127, а в двойном 1023. Например, порядок −3 в одинарном формате кодируется значением 124, то есть −3 + 127. После чтения из памяти смещение вычитают, и получают исходный порядок.

Битов для мантиссы конечное число, поэтому многие дроби нельзя записать точно в двоичной системе. Например, десятичная дробь 0,1 имеет бесконечную периодическую двоичную запись, и её приходится обрезать до доступного количества разрядов. Сохранённое значение округляется до ближайшего представимого, а последующие операции работают уже с приближением. Поэтому небольшая погрешность возможна не только при записи, но и в результате вычислений.

Форматы представления чисел с плавающей точкой IEEE 754

СвойствоОдинарная точность (32 бита)Двойная точность (64 бита)
Число битов для знака11
Число битов для порядка811
Число битов для дробной части мантиссы2352
Число значащих двоичных разрядов с учётом скрытой ведущей единицы2453
Диапазон порядка и приблизительный диапазон представимых чисел−126…127; примерно от 1,4·10−45 до 3,4·1038−1022…1023; примерно от 4,9·10−324 до 1,8·10308
Точность представления и округленияОколо 7 десятичных значащих цифрОколо 15–16 десятичных значащих цифр

Числа в диапазоне порядка в таблице относятся к нормализованным значениям; в IEEE 754 есть также специальные представления, в том числе для очень малых поднормальных чисел. Таблица помогает выбрать формат, если важны диапазон значений или точность вычислений. Двойной формат обычно точнее, но занимает вдвое больше памяти.

Разбор задач

Перевести 13,25 в двоичную систему и записать нормализованно

Нужно отдельно перевести целую и дробную части, а затем соединить их. После этого запишем число в форме с плавающей точкой, чтобы определить мантиссу и порядок. Проверка обратным переводом покажет, что значение не изменилось.

  1. Целую часть переводим делением на 2: 13 = 8 + 4 + 1, поэтому 13₁₀ = 1101₂.
  2. Дробную часть умножаем на 2: 0,25·2 = 0,5 даёт цифру 0; 0,5·2 = 1 даёт цифру 1. Значит, 0,25₁₀ = 0,01₂.
  3. Объединяем результаты: 13,25₁₀ = 1101,01₂. Переносим двоичную точку на три позиции влево: 1,10101₂·2³.
  4. Считываем поля математической записи: мантисса равна 1,10101₂, порядок p = 3, знак положительный.

Ответ: 13,25₁₀ = 1101,01₂ = 1,10101₂·2³. Проверка: 1,10101₂ = 1 + ½ + ⅛ + 1/32 = 1,65625, а 1,65625·8 = 13,25.

Структура одинарного формата IEEE 754

Всего в одинарном формате 32 бита. Нужно распределить их между знаком, порядком и дробной частью мантиссы согласно стандарту. Сумма размеров полей должна совпасть с общим размером ячейки.

  1. На знак отводится 1 бит: он различает положительные и отрицательные числа.
  2. На порядок отводится 8 бит. В этом поле кодируется порядок со смещением 127, а не просто записывается число битов порядка.
  3. Оставшиеся 23 бита хранят дробную часть мантиссы. Для нормализованного числа ведущая единица подразумевается.
  4. Проверяем сумму: 1 + 8 + 23 = 32 бита. С учётом подразумеваемой единицы точность мантиссы составляет 24 двоичных разряда.

Ответ: структура полей — 1 бит знака, 8 битов порядка и 23 бита дробной части мантиссы.

Почему 0,1 + 0,2 может отличаться от 0,3

Десятичные числа в условии выглядят простыми, но компьютер выполняет сложение над их двоичными представлениями. Важно выяснить, можно ли точно сохранить каждое значение в конечном числе битов. Затем нужно учесть, что округление происходит и при хранении, и во время вычислений.

  1. Дроби 0,1 и 0,2 имеют бесконечные периодические записи в двоичной системе, поэтому формат сохраняет лишь их округлённые приближения.
  2. При сложении компьютер складывает эти приближения, а не точные десятичные дроби. Результат тоже может округлиться до ближайшего представимого значения.
  3. В десятичном выводе может появиться число вроде 0,30000000000000004, хотя отличие от 0,3 очень мало. Конкретный вид результата зависит от формата и способа вывода.
  4. Если программе важно сравнить результат с ожидаемым, оценивают величину разности и задают допустимую погрешность.

Ответ: результат может отличаться от 0,3 из-за округления приближённых двоичных значений. Обычно расхождение мало, но в длинной цепочке вычислений погрешности могут накапливаться.

Типичные ошибки

Ошибочно считать, что число с плавающей точкой всегда хранится точно. Это кажется правдоподобным, если число имеет короткую десятичную запись, однако в двоичной системе оно может оказаться бесконечной дробью. Проверить себя можно переводом дробной части в двоичную систему: если она периодическая, конечное поле мантиссы не сохранит её точно.

Порядок часто путают с числом битов, отведённых под его поле. Путаница возникает из-за похожих слов, но порядок — показатель степени, а поле порядка — двоичный код этого показателя со смещением. Проверка простая: сначала выясните, какую степень двойки задаёт число, а затем отдельно смотрите, сколько битов выделено для её кодирования.

В поле мантиссы иногда записывают и ведущую единицу нормализованного числа. Её принимают за обязательный разряд записи, забывая, что стандарт подразумевает её для нормализованных значений. Сверьте количество разрядов: в одинарном формате явно хранится 23 бита дробной части, а точность равна 24 двоичным разрядам именно благодаря скрытой единице.

Ещё одна ошибка — игнорировать округление во время вычислений. Если результат отличается от ожидаемого, его могут объявить неверным, хотя расхождение объясняется накопленной погрешностью. Проверяйте величину разности и не полагайтесь на точное равенство вещественных значений, когда вычисления включали приближённые дроби.

Связь с другими темами

Для работы с плавающей точкой нужны навыки перевода целых и дробных чисел между десятичной и двоичной системами: без них трудно понять мантиссу и оценить точность записи. Понимание степеней двойки и позиционной записи помогает разобраться, как порядок меняет масштаб числа. Округление связывает эту тему с оценкой погрешностей. Позже эти знания пригодятся при анализе точности вычислений, сравнении вещественных чисел и поиске ошибок в программах.

Что запомнить

  • Число с плавающей точкой состоит из знака, мантиссы и порядка.
  • Порядок задаёт степень двойки, на которую умножается мантисса.
  • В нормализованной двоичной записи ведущая единица мантиссы обычно не хранится явно.
  • Форматы одинарной и двойной точности используют разное число битов и обеспечивают разную точность.
  • Некоторые вещественные числа нельзя точно представить конечной двоичной записью.
  • Округление при хранении и вычислениях может приводить к погрешности.

Частые вопросы по теме

Почему вещественное число в компьютере часто хранится не точно?

В памяти есть только конечное число битов, а некоторые числа требуют бесконечной двоичной записи. Их представляют ближайшим доступным значением, поэтому возникает округление. Например, десятичная дробь 0,1 не имеет конечной записи в двоичной системе.

Что означают знак, мантисса и порядок?

Знак указывает, положительное число или отрицательное. Мантисса хранит его значащие цифры, а порядок задаёт степень основания системы счисления, на которую мантисса умножается. В двоичном формате основание равно двум.

Почему в нормализованной записи ведущая единица мантиссы не хранится?

У нормализованного ненулевого двоичного числа перед двоичной точкой всегда стоит единица. Формат IEEE 754 подразумевает эту единицу, поэтому не расходует на неё бит и использует освободившийся бит для точности. Это правило относится к нормализованным числам.

Чем одинарная точность отличается от двойной?

Одинарный формат занимает 32 бита, двойной — 64. В двойном формате больше битов отведено под порядок и дробную часть мантиссы, поэтому обычно доступны и более широкий диапазон, и более высокая точность. За это приходится платить большим расходом памяти.

Почему нельзя всегда сравнивать результаты вычислений с вещественными числами на точное равенство?

Округление может дать вместо ожидаемого значения соседнее число, отличающееся на очень малую величину. Поэтому два математически равных результата после вычислений могут иметь разные машинные записи. Часто проверяют, меньше ли разность значений заранее выбранной малой погрешности.

Спросить по теме параграфа

§ 29. Хранение в памяти вещественных чисел

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
10 класс
Учебник
"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.