"Информатика (базовый и углублённый уровень)", Гейн А.Г., Сенокосов А.И.
Компьютерная арифметика описывает, как числа хранятся и обрабатываются в памяти компьютера. Поскольку для записи отводится конечное число разрядов, многие дроби представляются приближённо, а ошибки округления могут влиять на результат вычислений. Формат с плавающей запятой позволяет хранить числа разных масштабов, но не устраняет погрешность и имеет ограниченный диапазон. Понимание этих особенностей помогает правильно сравнивать результаты, замечать потерю точности и отличать её от переполнения.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Компьютерное представление числа — запись числа в памяти конечным набором разрядов. Разряд — одна позиция записи, в которой может храниться ограниченное число значений. Поэтому компьютер не располагает бесконечной последовательностью цифр для любого числа. Это понятие помогает понять, почему сохранённое значение иногда лишь приближает математическое.
Число с плавающей запятой — представление числа с помощью знака, значащей части и порядка. Значащая часть содержит сохраняемые цифры, а порядок задаёт масштаб: например, 1,25 × 10³ равно 1250. Положение запятой как будто перемещается в зависимости от порядка, отсюда название формата. Такой способ позволяет в одном формате хранить и очень большие, и очень малые числа.
Погрешность округления — отличие сохранённого или вычисленного приближённого значения от точного. Она появляется, когда разрядов не хватает и лишние цифры приходится округлить или отбросить. Например, число 1,234 при хранении только трёх значащих цифр можно заменить на 1,23. Понятие погрешности нужно, чтобы оценивать, насколько результат пригоден для задачи.
Переполнение — ситуация, когда результат выходит за пределы диапазона значений, представимых в выбранном формате. В таком случае обычное представление результата невозможно. Это не то же самое, что небольшое расхождение из-за округления: переполнение связано с границами диапазона. Его учитывают, выбирая подходящий формат и проверяя вычисления.
Память компьютера конечна, поэтому для числа выделяется лишь определённое количество разрядов. В позиционной записи значение дроби зависит от бесконечной последовательности разрядов, но компьютер способен сохранить только конечную часть. Например, в двоичной системе 0,1 записывается бесконечной периодической дробью: 0,0001100110011…₂. Когда такой записи отводят ограниченное число разрядов, её обрезают или округляют, и сохранённое значение становится приближённым.
В числе с плавающей запятой знак указывает, положительное число или отрицательное, значащая часть хранит его цифры, а порядок определяет, насколько велико или мало число. Например, запись 3,2 × 10⁵ позволяет представить крупное значение без хранения всех нулей в значащей части. Изменяя порядок, формат охватывает числа разных масштабов — от очень малых до очень больших. При этом число разрядов для значащей части ограничено, поэтому широкий диапазон не означает бесконечной точности.
Округление или усечение возникает при переводе числа в формат с ограниченной значащей частью, а также при арифметических операциях. При округлении учитывают отброшенные цифры, а при усечении просто удаляют их; в обоих случаях результат может отличаться от точного. Следующая операция получает уже приближённое значение, поэтому её собственное округление добавляется к предыдущей погрешности. Так ошибка способна накапливаться в длинной цепочке вычислений, хотя каждый отдельный шаг кажется точным.
Сложение чисел сильно разного масштаба может скрыть малое слагаемое: если его значащие разряды не помещаются рядом с разрядами большого числа, при округлении они теряются. Например, при ограниченной точности сумма 1 000 000 и 0,01 может сохраниться как 1 000 000. При вычитании близких чисел возникает другая трудность: значащие цифры совпадают и сокращаются, оставляя мало точных разрядов. Повторение таких операций или дальнейшее использование неточного результата может заметно усилить влияние погрешности.
Погрешность округления и переполнение описывают разные ограничения компьютерной арифметики. При округлении число помещается в диапазон, но хранится приближённо; например, 0,1 заменяется близким двоичным значением. При переполнении результат оказывается за границей диапазона и не может быть представлено в выбранном формате обычным образом. Поэтому небольшое отличие результата от ожидаемого проверяют как возможную погрешность, а слишком большой результат — как риск переполнения.
| Ситуация | Причина | Что происходит с результатом | Как учитывать |
|---|---|---|---|
| Представление дробного числа | Дробь имеет бесконечную двоичную запись или не укладывается в доступные разряды. | В памяти хранится ближайшее приближённое значение. | Учитывать точность формата и не ожидать точного равенства. |
| Округление или усечение | Для записи или результата операции не хватает разрядов. | Значение отличается от точного; округление может влиять на следующий шаг. | Оценивать допустимую погрешность и точность промежуточных вычислений. |
| Накопление погрешности | В цепочке операций каждый шаг использует приближённые значения. | Отклонение итогового результата может увеличиваться. | Проверять чувствительность вычислений и контролировать промежуточные результаты. |
| Вычитание близких чисел | Совпадающие значащие разряды сокращаются. | В результате остаётся меньше точных значащих разрядов. | По возможности выбирать более устойчивый способ вычисления. |
| Переполнение | Результат выходит за диапазон формата. | Обычное представление результата становится невозможным. | Проверять диапазон и при необходимости выбирать другой формат или порядок вычислений. |
Сначала найдите строку, похожую на вашу ситуацию, затем сопоставьте причину с тем, что произошло с результатом. Последний столбец подсказывает, какую проверку или меру предпринять. Таблица помогает не путать малую неточность представления с выходом за пределы диапазона.
Ответ: двоичная запись 0,1 бесконечна и периодична, поэтому в формате с конечным числом разрядов число обычно представляется приближённо.
Ответ: математически результат равен 0, а в машинной арифметике может получиться близкое к нулю ненулевое значение из-за приближённого представления и округления.
Ответ: в сумме может потеряться значащий вклад очень малого слагаемого, а при умножении больших чисел возможны округление или переполнение — конкретный исход зависит от формата и значений.
Ошибка: считать, что любое десятичное число хранится точно. Так думают, потому что в обычной десятичной записи дробь часто выглядит короткой. Но часть десятичных дробей имеет бесконечное двоичное представление, поэтому их приходится округлять. Проверьте себя: для дроби выполните перевод в двоичную систему и выясните, заканчивается ли запись.
Ошибка: считать, что округление происходит только при выводе на экран. Вывод действительно может сокращать количество показываемых цифр, но приближение появляется уже при хранении и промежуточных операциях. Из-за этого дальнейшие вычисления используют не точные исходные значения. Проверьте себя, сравнив точное вычисление с машинным и изучив промежуточные результаты.
Ошибка: требовать точного равенства от приближённых вещественных результатов. Небольшая разница может появиться даже у вычислений, которые математически должны дать одинаковое значение. Её допускают из виду, когда воспринимают сохранённые числа как точные. Для проверки сравните модуль разности с заранее выбранным допуском, подходящим для задачи.
Ошибка: принимать переполнение за обычную небольшую погрешность. Погрешность округления — это близкое приближённое значение внутри возможностей формата, а переполнение означает выход за его диапазон. Путают их, потому что в обоих случаях результат может отличаться от ожидаемого. Проверьте, не превышает ли значение максимально допустимый масштаб: если превышает, речь может идти о переполнении.
Для понимания компьютерной арифметики нужны позиционная запись чисел в двоичной системе и перевод дробей между системами счисления: именно так можно выяснить, какие значения записываются конечной последовательностью разрядов. Понятия точного и приближённого значения, округления и погрешности помогают оценить достоверность результата. Эти знания применяют при программировании численных методов и моделировании, где вычисления приближённые, а ошибки способны влиять на итог. Они также нужны, чтобы осмысленно проверять результаты программ.
Почему компьютер иногда выводит 0,30000000000000004 вместо 0,3?
В двоичном формате дроби 0,1 и 0,2 обычно хранятся как ближайшие доступные значения, а не точно. При сложении и последующем выводе проявляется небольшое отличие результата от математического 0,3. Это не ошибка самого сложения, а следствие конечной точности представления.
Всегда ли целые числа компьютер хранит точно?
Не всегда: точность зависит от формата и количества разрядов, выделенных для числа. В ограниченном целочисленном формате значения за пределами допустимого диапазона нельзя представить как положено. У форматов с плавающей запятой также есть предел точного представления целых чисел.
Почему одинаковые вычисления могут дать немного разные результаты?
Промежуточные результаты округляются, и порядок операций может менять то, какие разряды сохраняются. Поэтому разные последовательности действий иногда дают немного отличающиеся приближённые ответы. На итог также влияют выбранный формат и реализация вычислений.
Как отличить погрешность округления от переполнения?
Погрешность округления означает, что число представлено близким, но не точным значением. Переполнение возникает, когда результат выходит за допустимый диапазон формата, и компьютер не может представить его обычным способом. Небольшое расхождение само по себе не свидетельствует о переполнении.
Почему для сравнения вещественных чисел используют допуск?
Из-за округления вычисленное значение может чуть отличаться от математически точного, даже если по смыслу результаты совпадают. Поэтому сравнивают модуль разности чисел с заранее выбранным малым допуском. Допуск выбирают с учётом точности вычислений и задачи.
§ 25. Особенности компьютерной арифметики