"Информатика (базовый и углублённый уровень)", Гейн А.Г., Сенокосов А.И.
Компьютер хранит вещественные числа не как бесконечно точные математические значения, а как конечные двоичные приближения. Обычно в записи есть знак, мантисса — значащая часть — и порядок, задающий масштаб числа. Такой способ позволяет работать с очень большими и очень малыми величинами, но число разрядов ограничено. Поэтому возникают округления, а результат иногда зависит от последовательности операций.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Вещественное число с плавающей запятой — число, которое компьютер хранит приближённо в виде знака, значащей части и порядка. «Плавающая запятая» означает, что положение запятой задаётся не фиксированным числом разрядов, а порядком. Это позволяет одной и той же схеме хранить числа разных масштабов.
Мантисса — значащая часть числа в его компьютерном представлении. Чем больше разрядов отведено мантиссе, тем точнее обычно можно записать число и тем меньше ошибка округления. Однако запас разрядов конечен, поэтому бесконечную последовательность цифр мантисса не сохраняет.
Порядок — показатель степени основания системы счисления, который определяет масштаб числа. В двоичной записи мантиссу умножают на степень числа 2, а знак задаёт положительное или отрицательное значение. Порядок нужен, чтобы представить очень большие и очень малые числа, не записывая все нули в самой мантиссе.
Машинный эпсилон — наименьшее положительное число ε, для которого при вычислениях в данной системе ещё выполняется 1 + ε > 1. Он характеризует точность около единицы, а не является одинаковой погрешностью для любых чисел. С его помощью оценивают, насколько малое изменение компьютер способен различить в конкретной арифметике.
Числа в обычной записи могут отличаться масштабом на многие порядки: например, от тысячных до миллиардов. Если хранить все цифры и нули напрямую, для одних значений потребовалось бы слишком много разрядов, а для других значительная часть памяти ушла бы на незначащие нули. Представление со знаком, мантиссой и порядком разделяет информацию о значащих цифрах и масштабе. Поэтому ограниченное число разрядов позволяет охватить широкий диапазон величин.
Перед кодированием двоичную запись обычно нормализуют, то есть приводят к стандартному виду: 1,xxxxx₂ × 2ⁿ. Перенос запятой влево или вправо компенсируют изменением степени двойки, так что само значение не меняется. В нормализованной записи первая значащая цифра после запятой фиксирована, поэтому проще однозначно задавать число и использовать отведённые разряды для оставшихся цифр. Для нуля и отдельных специальных значений могут действовать особые правила кодирования.
Мантисса имеет конечную длину, тогда как некоторые числа требуют бесконечного числа двоичных разрядов. При записи таких чисел компьютер оставляет доступные разряды и округляет остаток. Поэтому многие десятичные дроби нельзя сохранить точно, даже если на экране они выглядят короткими. Округление происходит и в результатах арифметических операций, а значит, небольшая ошибка может перейти в следующие вычисления.
Порядок также занимает ограниченное число разрядов, поэтому доступный диапазон конечен. Если результат больше самого большого представимого числа, возникает переполнение; если он слишком мал по модулю, он может округлиться до нуля или записаться с меньшей точностью. При вычитании близких чисел может теряться значительная часть значащих цифр: после вычитания остаётся малый результат, но точность исходных приближений уже ограничена. Поэтому вычисление с числами близкого масштаба не всегда сохраняет ожидаемое число верных цифр.
В точной математике перестановка скобок при сложении не меняет результат, но компьютер округляет промежуточные значения. Если сперва сложить большое число с малым, малое может не повлиять на сохранённый результат; при другом порядке оно может сохраниться до следующего шага. Аналогично порядок сложения может изменить накопление погрешности. Значит, вычисления с плавающей запятой не всегда обладают всеми свойствами точной арифметики.
| Характеристика | Что означает | Как проявляется при вычислениях |
|---|---|---|
| Знак | Указывает, положительное число или отрицательное. | Позволяет хранить значения обоих знаков; правила для нуля зависят от формата. |
| Мантисса | Содержит значащие двоичные разряды числа. | Её длина ограничивает точность и вызывает округление. |
| Порядок | Задаёт степень основания, то есть масштаб числа. | Ограниченный диапазон порядка приводит к переполнению или потере малых значений. |
| Округление | Замена точного значения ближайшим доступным для хранения. | Появляется небольшая ошибка, которая может накапливаться в следующих операциях. |
| Ограниченность диапазона | Компьютер представляет числа только в пределах формата. | Слишком большое значение может переполниться, а слишком малое — потерять точность или стать нулём. |
| Машинный эпсилон | Наименьшее положительное ε, для которого 1 + ε > 1. | Показывает, насколько близкие к единице значения ещё различимы в данной арифметике. |
Таблица помогает определить, какая часть представления отвечает за конкретное ограничение. Например, потеря точности связана прежде всего с мантиссой и округлением, а выход за диапазон — с порядком. Машинный эпсилон полезен для оценки различимости чисел около единицы, но не заменяет анализ погрешности для любой задачи.
Условие. Представить число 101,101₂ в нормализованном виде с мантиссой и порядком. Требуется сохранить значение числа, изменив только положение запятой и компенсировав перенос степенью двойки. Для нормализованной двоичной записи используем вид 1,xxxxx₂ × 2ⁿ.
Ответ: 101,101₂ = 1,01101₂ × 2². Здесь мантисса равна 1,01101₂, а порядок — 2. При переносе запятой вправо порядок был бы отрицательным, поскольку масштаб пришлось бы уменьшить.
Условие. Объяснить, почему проверка 0,1 + 0,2 == 0,3 может вернуть ложь в программе. На первый взгляд десятичные дроби просты и их сумма очевидна. Но компьютерная арифметика обычно хранит такие значения в двоичном формате с конечной мантиссой.
Ответ: проверка может быть ложной из-за округления двоичных приближений. Для такой задачи обычно проверяют, меньше ли модуль разности суммы и 0,3 выбранной допустимой погрешности. Точное поведение зависит от формата чисел и языка программирования.
Условие. Сравнить (a + b) + c и a + (b + c), если a = 10²⁰, b = −10²⁰, c = 1. Предположим, что используется обычный формат с конечной точностью, например двоичная арифметика двойной точности. В точной математике оба выражения равны 1, но при вычислениях сохраняются округлённые промежуточные значения.
Ответ: обычно (a + b) + c даёт 1, а a + (b + c) — 0. Причина не в изменении правил сложения, а в округлении промежуточного результата и огромной разнице масштабов чисел. Для точных результатов вычислений важно выбирать подходящий алгоритм и порядок операций.
Считать, что вещественные числа всегда хранятся точно, — значит путать математическое число с конечным компьютерным приближением. Такое представление возникает, потому что на экране число часто выводится привычной десятичной записью. Проверьте себя: вспомните, что разрядов мантиссы ограниченное количество, и уточните, является ли запись точной для двоичной системы.
Полагать, что 0,1 имеет конечную двоичную запись, — ошибка: десятичная дробь может превращаться в бесконечную периодическую дробь в другой системе счисления. Её удобная десятичная форма создаёт впечатление, будто цифры можно сохранить без остатка. Проверка: попробуйте делить остатки при переводе дробной части в двоичную и обратите внимание, повторяются ли они.
Сравнивать вещественные результаты только на точное равенство рискованно, поскольку округлённые значения могут различаться на малую величину. Часто ученик ожидает, что одинаковые на вид десятичные записи соответствуют одинаковым внутренним значениям. Сверьте подход с задачей: для приближённых вычислений обычно сравнивают модуль разности с допустимой погрешностью.
Считать, что порядок операций не влияет на ответ, — значит переносить свойства точной арифметики на вычисления с округлением. Разные скобки задают разные промежуточные суммы, которые округляются по-разному. Проверьте себя на числах с сильно различающимися масштабами и вычислите выражение обоими способами.
Для работы с плавающей запятой нужны позиционная запись чисел, перевод между двоичной и десятичной системами счисления и понимание степеней числа. Знание погрешности и округления помогает писать программы, моделировать процессы и выполнять численные вычисления. В алгоритмах численного решения задач важно оценивать не только ответ, но и точность, а также устойчивость метода к небольшим ошибкам исходных данных и промежуточных вычислений.
Почему компьютер не всегда хранит число точно?
Для хранения числа выделено конечное количество разрядов, а математическая запись может требовать бесконечно много цифр. Компьютер сохраняет ближайшее представимое значение, поэтому при вычислениях появляется округление.
Что такое мантисса и порядок числа?
Мантисса содержит значащие цифры числа и определяет точность его записи. Порядок показывает, на какую степень основания системы счисления нужно умножить мантиссу, чтобы получить число нужного масштаба.
Почему дробь 0,1 нельзя точно представить в двоичной системе?
У дроби 0,1 в двоичной системе получается бесконечная периодическая запись. Поскольку компьютер хранит конечное число разрядов, он записывает только её округлённое приближение.
Почему выражение a + b + c может давать разные результаты при разной расстановке скобок?
При каждой операции компьютер может округлить промежуточный результат. Если сначала сложить числа, сильно различающиеся по величине, малое слагаемое может потеряться; при другом порядке промежуточное округление будет иным.
Как правильно сравнивать два результата вычислений с плавающей запятой?
Обычно проверяют, меньше ли модуль разности результатов заранее выбранной допустимой погрешности. Её выбирают с учётом масштаба чисел и требований задачи, а не используют точное равенство без специальной причины.
Лабораторная работа № 6 (к § 24 и 25) Представление вещественных чисел в памяти компьютера. Особенности компьютерной арифметики