МатВектор

Command Palette

Search for a command to run...

🔢 Численные методы30 минСложность 2/5+60 XP

Источники погрешностей: модель, метод и машинное округление

Почему 0.1+0.2 не равно 0.3, откуда берутся ошибки в расчётах и как считать абсолютную и относительную погрешность. Живые числа, таблицы и карточки — без воды.

3 интерактива3 квизаУрок 1 из 11Обновлено 04.10.2026Обычный

Калькулятор уверенно показывает 0.3, а язык Python — 0.30000000000000004. Кому верить? И второй сюрприз: программа посчитала координату моста с пятнадцатью знаками после запятой, а через месяц пролёт «гулял» на сантиметры. Численные методы начинаются с честного признания: любой расчёт врёт. Вопрос лишь в том, насколько, откуда и можно ли этим враньём управлять.

Три источника погрешности: модель, метод, округление#

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

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

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

Больше всего подлости — в первой. Формула пружины по закону Гука идеальна, пока деформации малы; вытяните её вдвое дальше предела пропорциональности — и расчётная жёсткость уйдёт в никуда, хотя арифметика будет безупречной. Поэтому опытный расчётчик сначала спрашивает: насколько честна сама формула? И только потом копает в машинные биты. Диагностика, какой из трёх этажей портит ответ, — навык, и собирается он из простых проверок.

Абсолютная и относительная погрешность: значащие цифры#

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

здесь — точное значение, — приближение; — абсолютная, — относительная погрешность

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

ИзмерениеАбсолютнаяОтносительнаяВердикт
Мост длиной 500 м, ошибка 5 см0.05 м0.01%блестяще
Масса 12 кг, ошибка 0.05 кг0.05 кг0.4%хорошо
Плёнка 0.02 мм, ошибка 0.005 мм0.005 мм25%ни о чём
Одна и та же ошибка в метрах и её истинный вес в процентах

Отсюда и правило значащих цифр: число с пятью значащими цифрами гарантирует относительную погрешность порядка , и никак не лучше. Записывая , мы обещаем три значащих цифры (1, 2, 0 — завершающий ноль значим!), то есть ошибку около относительных процентов. Ответ с восемью знаками после запятой, полученный из данных с двумя, — враньё в лучших традициях отчётности.

Машинная арифметика: почему 0.1 + 0.2 ≠ 0.3#

Компьютер хранит дроби по стандарту IEEE 754. Тип double занимает 64 бита: 1 бит на знак, 11 бит на порядок, 52 бита на мантиссу (плюс неявная ведущая единица — итого 53). Это значит: любое число живёт в памяти в виде , где мантисса имеет ровно 53 двоичных разряда. Минимальный зазор между соседними числами около единицы — машинное эпсилон .

Десятичная дробь в двоичной системе — бесконечная периодическая дробь , как в десятичной. Компьютер обрезает её на 53-м бите. И , и хранятся с крошечной ошибкой; при сложении ошибки складываются, и результат оказывается ближайшим к истине машинным числом — но не тем, которое вы ждали:

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

53 бита мантиссы — это примерно 15–16 верных десятичных цифр. Для чертежа моста за глаза. Но ошибки перемножаются при миллиардах операций, и потому правило одно: числа с плавающей точкой не сравнивают через равенство. Пишут с разумным — например, .

Как погрешности гуляют по арифметике#

У арифметики есть честная бухгалтерия ошибок. При сложении и вычитании складываются абсолютные погрешности, при умножении и делении — относительные:

— абсолютные, — относительные погрешности операндов; знаки и / ошибку не спасают

Числа. Пусть (то есть ) и (). Произведение с относительной погрешностью , то есть . Частное унаследует те же : . Ничего страшного.

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

Катастрофическое сокращение: чем опасно √(x+1) − √x#

Классика жанра — функция . Математически она безобидна и при больших ведёт себя как . Но посчитайте её «в лоб» на double при больших — и посмотрите, что выдаёт машина:

xВ лоб: √(x+1) − √xЧерез сопряжённоеСколько верных цифр
5.00000006249·10⁻³4.99999999999·10⁻³почти все
5.00000005559·10⁻⁵4.99999998750·10⁻⁵около 8
5.00003807·10⁻⁷4.999999999999·10⁻⁷около 6
07.0710678·10⁻⁹ни одной
05.0000000·10⁻⁹ни одной
Реальные значения double: наивная формула умирает, преобразованная — держится

Что происходит? При соседние машинные числа отстоят друг от друга на 2. Значит, округляется обратно в , корни совпадают, и разность равна нулю — при том что истинный ответ . А при вычитание уничтожает двенадцать старших цифр, и остаются младшие — те самые, что были испорчены округлением корней. Это и есть катастрофическое сокращение (catastrophic cancellation): близкие числа вычитаются, значащие цифры гибнут.

  1. Умножаем и делим на сопряжённое выражение:
  2. Числитель сворачивается по разности квадратов:
  3. Получаем устойчивую формулу — без единого вычитания близких чисел
  4. Проверка на : машина возвращает — все обещанные цифры на месте

Тот же приём спасает квадратное уравнение: когда , корень считают через , а второй корень — по Виету. Мораль: прежде чем винить компьютер, поищите алгебраическое преобразование, убирающее вычитание близких величин.

Неустойчивые алгоритмы: ошибка, которая растёт#

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

nВычислено в doubleТочное 3⁻ⁿЧто это значит
101.6935075·10⁻⁵1.6935088·10⁻⁵верны 6 цифр
155.6398875·10⁻⁸6.9691719·10⁻⁸сходится только порядок
20−1.36·10⁻⁵2.87·10⁻¹⁰мусор со знаком минус
30−14.274.86·10⁻¹⁵полная катастрофа
Реальный double-расчёт: ошибка в стартовых данных на 17-м знаке съедает всё к n = 30

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

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

  • Уменьшили шаг, а ошибка упала — главная погрешность метода: алгоритм в порядке, вопрос в дискретизации
  • Шаг уже микроскопический, а ошибка стоит на месте или растёт — вы упёрлись в округление: меняйте формулу, а не шаг
  • Ответ не сходится с экспериментом при идеальной сходимости — переоцените модель: где-то в ней нет существенного фактора
  • Ошибка взрывается со временем или номером шага — ищите неустойчивость: где-то в решении спрятан растущий множитель

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

Проверь себя+10 XP

Что вернёт double при вычислении ?

Проверь себя+10 XP

и . Какова относительная погрешность разности ?

Проверь себя+10 XP

Почему рекуррентный расчёт с точными формулами разваливается к ?

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

Что такое погрешность простыми словами?

Это разница между тем, что вычислила машина, и тем, что было на самом деле. Абсолютная погрешность показывает зазор в единицах величины (±0.05 кг), относительная — в процентах (0.4%). Судить о качестве расчёта по относительной честнее: ошибка в метр на мосту длиной километр и ошибка в метр при измерении спички — разные преступления.

Сколько значащих цифр хранит тип double?

53 бита мантиссы — это около 15–16 верных десятичных цифр, машинное эпсилон 2.22·10⁻¹⁶. Но гарантия относится к одному числу, а не к результату длинного расчёта: после тысяч операций верными могут остаться 5–6 цифр, а при неудачной формуле — ни одной.

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

Потому что результат арифметики — ближайшее машинное число, а не точное значение. Вместо if (s == 1) пишут if (Math.abs(s - 1) < 1e-9): сравнение с допуском. Допуск выбирают по масштабу задачи — для денег хватит 10⁻⁶, для физики частиц нужен относительный критерий.

Какой источник погрешности обычно главный?

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

Готовитесь к контрольной?

Чеклист тем по «Численные методы»: что вы уже умеете, что повторить и в каком порядке.

Открыть чеклист предмета →

Проверьте себя в бою

Босс-экзамен по «Численные методы»: квизы всех уроков плюс бесконечный поток сгенерированных задач. Каждая попытка — новый расклад.

Начать босс-экзамен →