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

§ 25. Особенности компьютерной арифметики

"Информатика (базовый уровень)", Гейн А.Г., Гейн А.А.

Объяснение темы В оглавлении: § 25. Особенности компьютерной арифметики

Кратко о теме

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источники ошибок в компьютерной арифметике

СитуацияПричинаКак проявляетсяКак уменьшить риск
Представление вещественного числаДвоичная запись не всегда конечнаЧисло хранится приближённоУчитывать погрешность и выбирать подходящий тип
Округление результата операцииТочный результат требует лишних разрядовПоследние цифры отличаются от математическихОценивать накопленную ошибку
Накопление ошибкиОшибки переходят в следующие операцииОтклонение постепенно увеличиваетсяКонтролировать промежуточные результаты
Потеря значащих цифрВычитание близких чиселТеряются точные старшие цифрыПреобразовать формулу и избегать такой операции
ПереполнениеРезультат вне диапазона типаПолучается неверное значение или бесконечностьПроверять границы и масштаб данных
Деление на число, близкое к нулюОчень сильное увеличение результатаБольшая ошибка или переполнениеПроверять знаменатель до деления

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

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

Разбор задач

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

Требуется объяснить результат проверки на точное равенство. В десятичной системе все три числа записываются конечными дробями, но компьютер работает с двоичной записью. Поэтому сравнивать нужно не последние разряды, а величину отклонения.

  1. Переведём дроби в двоичную систему: записи 0,1 и 0,2 продолжаются бесконечно.
  2. Сохраним только доступное число разрядов и округлим хвост каждой записи.
  3. Сложим получившиеся приближения, а затем сравним результат с представлением 0,3.

Ответ: машинные значения могут различаться из-за округления. Проверяют условие |(0,1 + 0,2) − 0,3| < ε, где ε выбрано для данной задачи.

2. Влияние порядка действий

Сравним выражения (10¹⁶ + 1) − 10¹⁶ и 10¹⁶ − 10¹⁶ + 1 при ограниченной точности. Предположим, что формат не способен сохранить единицу рядом с числом 10¹⁶. Тогда результат зависит от того, когда выполняется сложение малой добавки.

  1. В первом выражении при сложении 10¹⁶ и 1 единица теряется, поэтому промежуточный результат становится примерно 10¹⁶.
  2. После вычитания 10¹⁶ получается 0.
  3. Во втором выражении сначала вычитаются равные числа и получается 0, затем прибавляется 1.

Ответ: первое выражение может дать 0, а второе — 1. В точной арифметике ответы совпали бы, но округление промежуточного результата меняет машинный результат.

3. Устойчивый способ нахождения корней

Рассмотрим уравнение ax² + bx + c = 0, где b велико, а 4ac мало по сравнению с b². Обычная формула x = (−b ± √(b² − 4ac)) / 2a для одного корня может вычитать почти равные числа. Это приводит к потере значащих цифр.

  1. Сначала вычислим D = b² − 4ac и корень √D с доступной точностью.
  2. Корень, для которого знаки −b и ±√D совпадают, найдём обычной формулой: x₁ = (−b − sign(b)√D) / 2a.
  3. Второй корень получим без опасного вычитания: x₂ = c / (a·x₁).

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

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

Считать десятичную дробь точной. Конечная запись в десятичной системе не гарантирует конечную двоичную запись. Проверьте, как число представляется в выбранном формате, и допускайте небольшую погрешность.

Сравнивать вещественные числа на равенство. Округлённые результаты могут отличаться на один или несколько младших разрядов. Сравните модуль разности с ε, подобранным по масштабу задачи.

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

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

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

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

Дальше компьютерная арифметика пригодится при разработке алгоритмов, численных методах и моделировании. Она особенно важна в финансовых расчётах и тестировании программ, где незаметная погрешность может изменить решение.

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

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

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

Почему компьютер иногда считает, что 0,1 + 0,2 не равно 0,3?

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

Чем ошибка округления отличается от ошибки в алгоритме?

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

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

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

Как программа обнаруживает переполнение?

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

Как правильно сравнивать два вещественных числа?

Обычно проверяют не точное равенство, а условие |a − b| < ε, где ε — допустимая абсолютная погрешность. Если числа могут иметь сильно различный масштаб, используют также относительную погрешность: |a − b| / max(|a|, |b|). Значение ε выбирают с учётом задачи и точности вычислений.

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

§ 25. Особенности компьютерной арифметики

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

Учебник

Оглавление →
Предмет
Информатика
Класс
11 класс
Учебник
"Информатика (базовый уровень)", Гейн А.Г., Гейн А.А.