Ошибка округления

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

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

Если кратко, то в числовых расчетах существует два основных аспекта ошибок округления[7]:

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

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

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

Обозначение Представление Приближённое
значение
Ошибка
17 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...
32 1,259 921 049 894 873 164 76... 1,25992 0,000 001 049 894 873 164 76...
2 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].

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

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

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

Обозначения системы чисел с плавающей запятой

Система чисел с плавающей запятой характеризуется целыми числами:

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

Любое число имеет следующий вид: где являются целыми, такими, что для , а является целым числом, таким что .

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

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

Стандарт IEEE

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

Точность знак (в битах) Экспонента (в битах) Остаток мантиссы (в битах)
Одинарной точности 1 8 23
Двойной точности 1 11 52

Примечание: Остаток мантиссы — мантисса без старшего разряда (старший разряд всегда равен 1).

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

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

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

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

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

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

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

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

  • Пример: десятичтое число может быть представлено в виде

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

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

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

Таким образом, .
В итоге ошибка округления будет равна .


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

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

Теорема

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

Доказательство

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

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

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

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

Сложение

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

  • Например, сложение и чисел двойной точности в IEEE формате,

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

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

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

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

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

Умножение

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

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

Деление

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

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

Вычитание

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

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

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

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

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

  • Например, . Результат явно представим, но верить ему трудно.

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

Накопление ошибок округления

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

Неустойчивые алгоритмы

Алгоритмический или вычислительный процесс называется устойчивым, если малые изменения в входных данных дают малые изменения в результирующих данных и неустойчивым, если получаем большие изменения[12]. Например, вычисление с помощью «очевидного» метода неустойчиво около , поскольку получаем большую ошибку в результате вычитания двух близких величин, в то время как эквивалентное выражение устойчиво[12].

К сожалению, не для всех задач можно найти устойчивые алгоритмы. Рассмотрим пример, придуманный Милнером. Пусть дана последовательность

Можно доказать, что эта последовательность имеет предел при , равный 6. Однако при вычислениях с плавающей точкой, какая бы точность ни была выбрана (можно выделять произвольно большое количество бит под мантиссу и экспоненту), вычисляемые значения стремятся к 100[13].

Плохо обусловленные задачи

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

Число обусловленности задачи — это отношение относительного изменения решения на относительное изменение исходных данных[3]. Задача хорошо обусловлена, если малое относительное изменение во входных данных приводит к малым относительным изменениям в результирующих данных. В противном случае задача плохо обусловлена[3]. Другими словами, задача плохо обусловлена, если её число обусловленности «много больше» 1.

Число обусловленности вводится как мера ошибок округления, которые могут возникнуть при решении плохо обусловленных задач[7].

См. также

Примечания

  1. Rizwan, 2009, с. 11–18.
  2. Ueberhuber, 1997, с. 139–146.
  3. 1 2 3 4 5 6 7 8 9 10 Forrester, 2018.
  4. Aksoy, DeNardis, 2007, с. 134.
  5. Ralston, Rabinowitz, 2012, с. 2–4.
  6. Chapman, 2012, с. 454.
  7. 1 2 Chapra, 2012.
  8. Laplante, 2000, с. 420.
  9. Higham, 2002, с. 43–44.
  10. Volkov, 1990, с. 24.
  11. Biran, Breiner, 2010, с. 193–194.
  12. 1 2 Collins, Charles. Condition and Stability. Department of Mathematics in University of Tennessee (2005). Дата обращения: 28 октября 2018.
  13. Кулямин, 2007, с. 6.

Литература

  • Butt Rizwan. Introduction to Numerical Analysis Using MATLAB. — Jones & Bartlett Learning, 2009. — ISBN 978-0-76377376-2.
  • Christoph W. Ueberhuber. Numerical Computation 1: Methods, Software, and Analysis. — Springer, 1997. — ISBN 978-3-54062058-7.
  • Dick Forrester. Math/Comp241 Numerical Methods (lecture notes). — Dickinson College, 2018.
  • Pelin Aksoy, Laura DeNardis. Information Technology in Theory. — Cengage Learning, 2007. — ISBN 978-1-42390140-2.
  • Anthony Ralston, Philip Rabinowitz. A First Course in Numerical Analysis. — 2nd. — Courier Dover Publications, 2012. — (Dover Books on Mathematics). — ISBN 978-0-48614029-2.
  • Stephen Chapman. MATLAB Programming with Applications for Engineers. — Cengage Learning, 2012. — ISBN 978-1-28540279-6.
  • Steven Chapra. Applied Numerical Methods with MATLAB for Engineers and Scientists. — McGraw-Hill, 2012. — ISBN 9780073401102.
  • Philip A. Laplante. Dictionary of Computer Science, Engineering and Technology. — CRC Press, 2000. — ISBN 978-0-84932691-2.
  • Nicholas John Higham. Accuracy and Stability of Numerical Algorithms. — 2. — Society for Industrial and Applied Mathematics (SIAM), 2002. — ISBN 978-0-89871521-7.
  • Volkov E. A. Numerical Methods. — Taylor & Francis, 1990. — ISBN 978-1-56032011-1.
  • Adrian B. Biran, Moshe Breiner. Глава 5 // What Every Engineer Should Know About MATLAB and Simulink. — Boca Raton, Florida: CRC Press, 2010. — P. 193–194. — ISBN 978-1-4398-1023-1.
  • В. В. Кулямин. Стандартизация и тестирование реализаций математических функций, работающих с числами с плавающей точкой // Программирование. — 2007. — Т. 33, вып. 3. — С. 1-29.

Литература для дальнейшего чтения

  • Matt Parker. Humble Pi: When Math Goes Wrong in the Real World. — Riverhead Books, 2021. — ISBN 978-0593084694.

Ссылка