"Информатика (базовый и углублённый уровень)", Гейн А.Г., Сенокосов А.И.
Вещественные числа компьютер хранит не как бесконечные математические записи, а как набор битов ограниченной длины. Обычно число представляют в форме с плавающей точкой: отдельно кодируют знак, мантиссу и порядок. Мантисса отвечает за точность, порядок — за масштаб и диапазон значений. Поэтому при переводе числа в машинный формат возможны округление, потеря точности, переполнение и получение результата, немного отличающегося от точного.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Вещественное число в памяти компьютера — это конечная последовательность битов, которой значение обычно задаётся приближённо. Не всякая десятичная дробь имеет конечную двоичную запись, а бесконечную запись нельзя целиком разместить в памяти. Поэтому формат хранения выбирает ограниченное число разрядов и допускает небольшую погрешность.
Плавающая точка — способ записи числа как произведения мантиссы и степени основания системы счисления: ±m · 2ⁿ. При изменении порядка запятая словно перемещается, поэтому один формат может описывать и очень малые, и очень большие числа. В компьютере отдельно кодируются знак, мантисса и порядок.
Мантисса — часть записи, содержащая значащие цифры числа. Именно она задаёт, насколько подробно фиксируется значение: дополнительные двоичные разряды позволяют сохранить больше точных цифр. Поэтому разрядность мантиссы прежде всего определяет точность, а не общий размер числа.
Порядок числа — показатель степени основания, на которую умножается мантисса. Он позволяет менять масштаб записи, например переходить от 1,2 · 2³ к 1,2 · 2⁻³. Диапазон доступных порядков определяет, какие по величине числа можно сохранить.
Неограниченная точность невозможна, потому что память компьютера конечна: под одно число выделяется определённое количество битов. Кроме того, дробь 0,1 в двоичной системе записывается бесконечной периодической последовательностью. Даже если десятичная запись заканчивается, это ещё не гарантирует конечную двоичную запись. Значит, формат вынужден хранить ближайшее доступное приближение.
Сначала число переводят в двоичную систему, а затем приводят к нормализованному виду, где перед двоичной точкой остаётся одна ненулевая цифра: ±1,xxxx · 2ⁿ. Знак показывает, положительно число или отрицательно, мантисса содержит значащую часть, а порядок обозначает степень двойки. После этого каждая часть кодируется битами своего поля. Такое разделение позволяет экономно описывать числа разных масштабов.
Размер полей задаёт свойства формата. Биты мантиссы определяют, сколько значащих двоичных цифр будет сохранено, поэтому влияют на точность и величину округления. Биты порядка кодируют показатель степени и тем самым задают диапазон от очень малых до очень больших значений. Увеличение одного поля не заменяет увеличение другого.
Если после нормализации значащих цифр больше, чем помещается в мантиссу, лишние разряды отбрасывают по правилу округления. Например, сохраняют ближайшее представимое значение, учитывая первый отброшенный разряд и последующие. Поэтому некоторые числа, в том числе 0,1, не совпадают с сохранённым двоичным кодом. При обратном переводе эта разница проявляется в вычислениях.
Диапазон формата тоже ограничен. Слишком большое число вызывает переполнение, потому что доступного порядка уже не хватает; слишком малое может стать нулём или специальным малым значением. Кроме того, каждая операция может округлять промежуточный результат. Поэтому итог программы иногда отличается от точного математического ответа, даже если отдельная ошибка кажется незначительной.
| Часть представления | Что кодирует | На что влияет |
|---|---|---|
| Знак | Положительность или отрицательность числа | Направление значения на числовой оси |
| Мантисса | Значащие двоичные цифры | Точность и величину округления |
| Порядок | Степень основания системы счисления | Масштаб и диапазон чисел |
| Разрядность поля | Количество битов, выделенных части формата | Возможности точности или диапазона |
| Округление и точность | Способ замены недоступного значения ближайшим доступным | Погрешность хранения и вычислений |
Таблицу удобно читать от назначения части к её последствию. Если требуется сохранить больше значащих цифр, смотрят на мантиссу; если нужно охватить больший разброс величин, проверяют порядок. Разрядность поля показывает, за счёт чего именно формат получает свои свойства.
Нужно перевести десятичное число 5,5 в двоичную систему и записать его в нормализованном виде с основанием 2. Целую и дробную части переводим отдельно, поскольку для них используются разные шаги. Затем переносим двоичную точку так, чтобы слева осталась одна единица.
Ответ: 5,5₁₀ = 101,1₂ = 1,011₂ · 2². Здесь мантисса равна 1,011₂, а порядок равен 2.
В учебном формате мантисса хранит три значащих двоичных разряда. Для числа 1,1011₂ нужно оставить три разряда и применить округление к ближайшему представимому значению. Отбрасываются цифры после первых трёх, поэтому решающим будет первый отброшенный разряд.
Ответ: число будет записано как 1,11₂. Точное значение заменено ближайшим доступным, потому что четвёртый значащий разряд не помещается в мантиссу.
Мантисса содержит четыре значащих двоичных разряда, а порядок может принимать значения от −2 до 3. Для каждого числа нужно проверить нормализованный вид, допустимость порядка и возможность конечной записи мантиссы. Точная представимость требует выполнения всех этих условий одновременно.
Ответ: 13 представимо точно. 0,1 точно не представимо сразу по двум причинам: порядок выходит за допустимый диапазон, а двоичная мантисса не заканчивается.
Ошибка — считать, что любая конечная десятичная дробь точно хранится в двоичном формате. Так думают, потому что в десятичной записи число выглядит завершённым, но основания систем различаются. Проверка проста: переведите дробь в двоичную систему и выясните, заканчивается ли последовательность.
Ошибка — путать мантиссу и порядок. Мантисса отвечает за значащие цифры и точность, а порядок изменяет масштаб числа. Чтобы проверить себя, спросите: речь идёт о деталях записи или о перемещении двоичной точки?
Ошибка — считать, что дополнительные биты порядка повышают точность. Они расширяют диапазон доступных степеней, но число значащих цифр остаётся прежним. Сравнивайте отдельно разрядность мантиссы и разрядность порядка.
Ошибка — принимать результат машинного вычисления за точный математический ответ. Округление может происходить после каждой операции, и небольшие отклонения накапливаются. Для проверки анализируйте формат, промежуточные значения и допустимую погрешность.
Для понимания темы нужны навыки перевода целых чисел и дробей между десятичной и двоичной системами. Без них трудно получить мантиссу и порядок исходного числа. Особенно полезно уверенно умножать двоичную дробь на 2.
Представление с плавающей точкой опирается на позиционную запись и степени основания системы счисления. Позиция цифры определяет её вклад, а перенос точки изменяет степень двойки. Поэтому нормализация является прямым применением изученных свойств степеней.
Знание формата необходимо для анализа погрешностей и надёжности численных программ. Оно помогает объяснить неожиданные результаты сравнений, суммирования и деления. При разработке алгоритмов учитывают не только формулы, но и ограничения машинного представления.
Почему компьютер не всегда хранит вещественное число точно?
Память компьютера конечна, поэтому для числа выделяется ограниченное количество битов. Многие десятичные дроби, например 0,1, имеют бесконечную периодическую запись в двоичной системе и сохраняются только приближённо.
Что такое мантисса и порядок числа?
Мантисса содержит значащие цифры числа и определяет точность его записи. Порядок показывает степень основания системы счисления, поэтому задаёт масштаб числа и участвует в определении диапазона значений.
От чего зависит точность представления вещественного числа?
Главным образом от количества битов, выделенных под мантиссу. Чем больше значащих двоичных разрядов можно сохранить, тем меньше ошибка округления.
Почему при вычислениях возникают ошибки округления?
Промежуточный результат может не иметь точного представления в выбранном формате. Тогда компьютер округляет его до ближайшего доступного значения, и такие небольшие ошибки могут накапливаться.
Чем отличаются переполнение и потеря точности?
Потеря точности означает, что число представлено приближённо из-за ограниченной мантиссы. Переполнение возникает, когда результат выходит за максимальный диапазон формата, а слишком малое число может стать неразличимым от нуля.
§ 24. Представление вещественных чисел в памяти компьютера