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

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

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

Ошибка представления

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

Обозначение Представление Приближённоезначение Ошибка 0,(142 857) 0,142 857 0,000 000 (142 857)ln 2 0,693 147 180 559 945 309 41... 0,693 147 0,000 000 180 559 945 309 41...log10 2 0,301 029 995 663 981 195 21... 0,3010 0,000 029 995 663 981 195 21... 1,259 921 049 894 873 164 76... 1,25992 0,000 001 049 894 873 164 76... 1,414 213 562 373 095 048 80... 1,41421 0,000 003 562 373 095 048 80...e 2,718 281 828 459 045 235 36... 2,718 281 828 459 045 0,000 000 000 000 000 235 36...π 3,141 592 653 589 793 238 46... 3,141 592 653 589 793 0,000 000 000 000 000 238 46...

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

Многократное округление может привести к накоплению ошибки. Например, если число 9,945309 сначала округлить до двух знаков (9,95), а затес ещё раз до одного знака (получится 10,0), общая ошибка будет 0,054691. Округление 9,945309 до одного знака после запятой (получится 9,9) за один шаг даст меньшую ошибку (0,045309). Такое может случиться, например, если программа осуществляет арифметические вычисления в 80-битном формате x86 числа с плавающей запятой, а затем округляет результат до 64-битного формата IEEE 754.

Система чисел с плавающей запятой

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

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

Любое число имеет следующий вид:

где являются целыми, такими, что для , а является целым числом, таким что .

Нормализованная система чисел с плавающей запятой

Система чисел с плавающей запятой нормализована, если старший знак всегда ненулевой, если число ненулевое. Поскольку мантисса равна , мантисса ненулевого числа в нормализованном виде удовлетворяет неравенствам . Таким образом, нормализованная форма ненулевого IEEE числа с плавающей запятой имеет вид , где . В двоичном числе старший разряд всегда равен , так что он не записывается и называется неявным битом. Это даёт лишний бит точности, так что ошибка округления, вызванная представлением числа, сокращается. Поскольку система чисел с плавающей запятой конечна и дискретна, она не может представить все вещественные числа, что означает, что бесконечнозначные (с бесконечным числом знаков) вещественные числа могут быть лишь аппроксимированы некоторыми конечнозначными числами путём округления. Аппроксимация числом с плавающей запятой данного вещественного числа с помощью может быть выражена следующим образом. Полное количество нормализованных чисел с плавающей запятой равно где учитывает знак числа — положительное или отрицательное количество вариантов старшего разряда количество вариантов остальных разрядов мантиссы количество вариантов показателя учитывает вариант, когда число равно .

Стандарт IEEE

По стандарту IEEE основание равно двум () и используется нормализация. По этому стандарту записываются знак числа, показатель и мантисса в отдельных полях слова с плавающей запятой, каждое из полей имеет фиксированный размер (в битах). Два наиболее распространённых уровня точности для чисел с плавающей запятой — одинарная точность и двойная точность. Точность знак (в битах) Экспонента (в битах) Остаток мантиссы (в битах)Одинарной точности 1 8 23 Двойной точности 1 11 52 Примечание: Остаток мантиссы — мантисса без старшего разряда (старший разряд всегда равен 1).

Машинный эпсилон

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

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

Ошибка округления при различных правилах округления

Имеется два распространенных правила округления: округление отбрасыванием () и округление до ближайшего (). Стандарт IEEE использует округление до ближайшего.

Округление отбрасыванием: Запись числа по основанию обрезается после -го знака. Это правило округления является смещённым, поскольку всегда переводит число ближе к нулю. Округление до ближайшего: устанавливает ближайшее число с плавающей запятой для числа . В случае неоднозначности выбирается число, в котором последняя цифра чётна (в двоичном виде это всегда 0). Для стандарта IEEE, в котором основанием служит , это означает, что в случае неоднозначности число округляется так, что последняя цифра равна . Это правило округления точнее, но более ресурсоемкое. Округление с сохранением последнего знака чётным при равенстве гарантирует, что оно не будет систематически округляться вверх или вниз. Это делается для того, чтобы избежать возможности нежелательного медленного смещения в длительных расчетах, вызванного просто округлением со смещением. Примеры ниже демонстрируют уровень ошибки округления для двух правил округления. Правило округления до ближайшего приводит к меньшим ошибкам. x Округлениеотбрасыванием Ошибкаокругления Округлениек ближайшему Ошибкаокругления1,649 1,6 0,049 1,6 0,0491,650 1,6 0,050 1,6 0,0501,651 1,6 0,051 1,7 −0,049 1,699 1,6 0,099 1,7 −0,0011,749 1,7 0,049 1,7 0,0491,750 1,7 0,050 1,8 −0,050

Вычисление ошибки округления в стандарте IEEE

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

Пример: десятичтое число может быть представлено в виде Поскольку 53-й бит справа от (двоичной) запятой равен 1 с последующим ненулевым битом, правило округления к ближайшему требует округление вверх, то есть, добавлению 1 к 52-му биту. Таким образом, представлением в виде нормализованного числа с плавающей запятой в стандарте IEEE будет

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

Измерение ошибки округления с помощью машинного эпсилона

Машинный эпсилон может быть использован для измерения уровня ошибки округления при использовании двух правил округления выше. Ниже приведены формулы и соответствующее доказательство. Здесь используется первое определение машинного эпсилона.

Теорема Округление отбрасыванием: Округление к ближайшему:

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

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

Ошибка округления, вызванная арифметикой с плавающей запятой

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

Сложение

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

Например, сложение и чисел двойной точности в IEEE формате,Результат будет сохранён как , поскольку в стандарте IEEE будет использовано округление к ближайшему. Таким образом, равно в стандарте IEEE чисел двойной точности и ошибка округления равна .

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

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

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

Ошибка такого рода может произойти вместе с ошибкой поглощения в одной операции.

Умножение

В общем случае, произведение двух p-значных мантисс образует до 2p знаков, так что результат может не помещаться в мантиссу. В результате может быть применено округление.

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

Деление

В общем случае частное двух 2p-значных мантисса может содержать больше, чем p цифр. В результате может быть использовано округление.

Например, если используется нормализованная система чисел, описанная выше, то , но . Таким образом, хвост обрезается.

Вычитание

Поглощение также применимо и к вычитанию.

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

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