"Информатика (базовый уровень)", Гейн А.Г., Гейн А.А.
Вещественные числа компьютер хранит не как привычную десятичную запись, а как двоичный код с ограниченным числом разрядов. Обычно число разделяется на знак, мантиссу и порядок: мантисса хранит значащие цифры, а порядок задаёт масштаб. Такое представление позволяет работать и с очень большими, и с очень малыми числами. Однако многие значения приходится округлять, поэтому результат вычислений может отличаться от математически точного.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Вещественное число в памяти компьютера — число, которое обычно хранится приближённо в виде двоичной записи с ограниченным числом разрядов. В отличие от математической записи, память не может содержать бесконечную последовательность цифр. Поэтому для такого числа нужно учитывать возможную погрешность хранения.
Представление с плавающей запятой — способ записать число как мантиссу, умноженную на основание системы счисления в степени, называемой порядком. Например, запись 1,101₂ × 2³ задаёт число 13. Положение запятой как бы перемещается благодаря изменению порядка, поэтому один формат подходит для чисел разного масштаба.
Мантисса — значащая часть числа. Она содержит цифры, которые определяют, насколько подробно записано значение, поэтому число её разрядов связано с точностью. Чем больше разрядов можно выделить под мантиссу, тем меньше обычно ошибка округления.
Порядок — показатель степени основания, который задаёт масштаб числа и влияет на его диапазон. Большой положительный порядок позволяет представить очень крупное значение, а отрицательный — очень малое. Отдельное хранение порядка избавляет от необходимости записывать длинную цепочку нулей.
Плавающая запятая позволяет одним способом хранить очень большие и очень малые числа, потому что запятая не обязана находиться в фиксированном месте. Значащие цифры записываются в мантиссе, а расстояние от них до запятой задаётся порядком. Например, число 4500 можно представить как 4,5 × 10³, а 0,0045 — как 4,5 × 10⁻³.
Для хранения числа компьютер использует двоичную форму, поскольку память состоит из битов, принимающих значения 0 или 1. Знак отделяют от значащей части и порядка, чтобы положительные и отрицательные значения можно было различать независимо от их величины. Затем каждое поле кодируют последовательностью битов, а специальная схема интерпретирует эти поля как одно число.
Нормализация приводит ненулевое число к единому виду, например 1,10101₂ × 2³. Это нужно потому, что одну и ту же величину можно записать несколькими способами, а единый вид облегчает обработку и сравнение. Кроме того, значащие цифры оказываются сосредоточены в начале мантиссы, поэтому отведённые разряды используются эффективнее.
Число битов в полях мантиссы и порядка ограничено, поскольку размер ячейки памяти конечен. Разряды мантиссы нельзя бесконечно увеличивать, поэтому они задают точность и величину округления. Разряды порядка отвечают за доступные степени двойки, то есть за диапазон от самых малых до самых больших чисел.
Большинство вещественных чисел нельзя точно представить конечной двоичной записью, потому что их дробная часть при переводе может повторяться бесконечно. Например, десятичное 0,1 превращается в двоичную бесконечную последовательность 0,000110011… . Поскольку сохранить её целиком нельзя, компьютер оставляет ограниченное число битов и округляет значение.
| Формат | Всего битов | Знак | Порядок | Мантисса | Что сравнивать |
|---|---|---|---|---|---|
| Одинарная точность (IEEE 754) | 32 | 1 бит | 8 бит | 23 бита | Меньше точность и диапазон |
| Двойная точность (IEEE 754) | 64 | 1 бит | 11 бит | 52 бита | Выше точность и шире диапазон |
При сравнении форматов сначала смотрят на общее число битов, а затем — на распределение памяти между полями. Большее поле мантиссы означает более точное хранение, а большее поле порядка — возможность представить более широкий диапазон. В таблице указаны основные поля стандартных форматов IEEE 754; в реальном кодировании также используются служебные значения, например ноль, бесконечность и специальные значения.
Условие: представьте число 13,25 в двоичной системе и запишите его в нормализованном виде с плавающей запятой. Нужно отдельно перевести целую и дробную части, потому что для них применяются разные правила. Затем положение запятой определит порядок.
Ответ: 13,25₁₀ = 1101,01₂ = 1,10101₂ × 2³. Мантисса в нормализованной записи — 1,10101₂, а порядок равен 3. Знак числа положительный.
Условие: объясните, почему десятичное число 0,1 при хранении в двоичном формате может быть представлено не точно. Здесь важно не просто назвать округление, а установить, почему оно возникает. Для этого рассмотрим перевод дроби в двоичную систему.
Ответ: 0,1 не имеет конечной двоичной дробной записи, поэтому в формате с ограниченной мантиссой хранится близкое значение. При обратном выводе оно может выглядеть как 0,1, но внутреннее значение будет немного отличаться. Ошибка особенно заметна при многократных операциях.
Условие: сравните представление одного числа в форматах одинарной и двойной точности и укажите, как изменятся точность и диапазон. Сравнивать нужно не только общий размер, но и поля, влияющие на разные свойства. В обоих форматах знак занимает один бит.
Ответ: двойная точность обычно хранит то же число точнее и позволяет работать с более широким диапазоном. Одинарная точность экономит память и может быть быстрее, но её погрешность и ограничения проявляются раньше. Увеличение точности здесь сопровождается расширением диапазона, однако это связано с отдельным увеличением обоих полей.
Считать, что любое вещественное число хранится точно. Так думают из-за привычного отображения 0,1 на экране, но вывод часто округляется отдельно от внутреннего хранения. Проверяйте себя: переводите дробь в двоичную систему и смотрите, заканчивается ли запись.
Путать мантиссу и порядок. Ошибка возникает, когда обе части называют просто «цифрами числа». Запомните проверку: мантисса отвечает за значащие цифры и точность, порядок — за масштаб и диапазон.
Считать, что увеличение точности всегда означает увеличение диапазона. Это неверно, потому что точность задаёт мантисса, а диапазон — порядок. Сверяйте, какое именно поле стало больше в рассматриваемом формате.
Сравнивать вещественные результаты только точным равенством. Округление может сделать математически равные результаты немного различными. При необходимости сравнивайте модуль разности с небольшим допустимым отклонением.
Для понимания представления вещественных чисел нужны двоичная система счисления, понятия разряда и правила перевода дробей между системами. Без этого трудно объяснить, откуда берутся нормализованная запись и бесконечные двоичные дроби.
Знание форматов с плавающей запятой необходимо при программировании и численных вычислениях. Оно помогает анализировать погрешности алгоритмов, выбирать подходящую точность и понимать, почему последовательные операции иногда накапливают ошибку.
Почему запятая в названии «плавающая»?
Положение двоичной запятой не закреплено в одном месте. Его задаёт порядок: изменяя показатель степени основания, компьютер может представить число с теми же значащими цифрами в другом масштабе.
Чем мантисса отличается от порядка?
Мантисса содержит значащую часть числа и в основном определяет точность. Порядок показывает, во сколько раз эту часть нужно увеличить или уменьшить, поэтому он связан с диапазоном значений.
Почему компьютер не всегда хранит десятичную дробь точно?
В двоичной системе некоторые десятичные дроби имеют бесконечную запись. Поскольку в памяти отведено ограниченное число битов, запись обрывают и округляют.
Что влияет на точность представления вещественного числа?
Главным образом точность определяется числом битов, выделенных под мантиссу. Чем больше значащих двоичных разрядов можно сохранить, тем меньше ошибка округления.
Чем одинарная точность отличается от двойной?
Одинарный формат IEEE 754 занимает 32 бита, а двойной — 64. В двойном формате больше битов отведено и под мантиссу, и под порядок, поэтому обычно выше точность и шире диапазон.
§ 24. Представление вещественных чисел в памяти компьютера