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

редактировать

Машинный эпсилон дает верхнюю границу относительной ошибки из-за округления в арифметике с плавающей запятой. Это значение характеризует компьютерную арифметику в области численного анализа и, в более широком смысле, в области вычислительной науки. Величина также называется мачепс или округление единиц и обозначается символами греческого эпсилон или полужирного римского u соответственно. ε {\ Displaystyle \ varepsilon}

СОДЕРЖАНИЕ
  • 1 Значения для стандартной аппаратной арифметики с плавающей запятой
  • 2 Формальное определение
  • 3 Арифметическая модель
  • 4 Определения вариантов
  • 5 Как определить машинный эпсилон
    • 5.1 Приближение
  • 6 См. Также
  • 7 Примечания и ссылки
  • 8 Внешние ссылки
Значения для стандартной аппаратной арифметики с плавающей запятой

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

IEEE 754 - 2008 г. Распространенное имя Тип данных C ++ База б {\ displaystyle b} Точность п {\ displaystyle p} Машина эпсилон б - ( п - 1 ) / 2 {\ displaystyle b ^ {- (p-1)} / 2} Машина эпсилон б - ( п - 1 ) {\ displaystyle b ^ {- (p-1)}}
двоичный16 половинная точность N / A 2 11 (один бит неявный) 2 −11 ≈ 4,88e-04 2 −10 ≈ 9,77e-04
двоичный32 одинарная точность плавать 2 24 (один бит неявный) 2 −24 ≈ 5,96e-08 2 −23 ≈ 1,19e-07
двоичный64 двойная точность двойной 2 53 (один бит неявный) 2 −53 ≈ 1.11e-16 2 −52 ≈ 2,22e-16
повышенная точность, длинный двойной _float80 2 64 2 −64 ≈ 5,42e-20 2 −63 ≈ 1.08e-19
двоичный128 четверная (ruple) точность _float128 2 113 (один бит неявный) 2 −113 ≈ 9,63e-35 2 −112 ≈ 1,93e-34
десятичный32 десятичная дробь одинарной точности _Decimal32 10 7 5 × 10 −7 10 −6
десятичный64 десятичная дробь с двойной точностью _Decimal64 10 16 5 × 10 −16 10 −15
десятичный128 четверная (дробная) точность десятичная _Decimal128 10 34 5 × 10 −34 10 −33
Формальное определение

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

Необходима некоторая предыстория, чтобы определить значение из этого определения. Система счисления с плавающей запятой характеризуется основанием системы счисления, которое также называется основанием, и точностью, т. Е. Количеством разрядов системы счисления в мантиссе (включая любой начальный неявный бит). Все номера с одинаковым показателем, имеют интервал,. Интервал изменяется в числах, которые являются полной степенью ; расстояние на стороне большей величины в раз больше, чем расстояние на стороне меньшей величины. б {\ displaystyle b} п {\ displaystyle p} б {\ displaystyle b} е {\ displaystyle e} б е - ( п - 1 ) {\ Displaystyle Ь ^ {е- (р-1)}} б {\ displaystyle b} б {\ displaystyle b}

Поскольку машинный эпсилон является границей относительной ошибки, достаточно рассматривать числа с показателем степени. Также достаточно рассматривать положительные числа. Для обычного типа округления от округления до ближайшего абсолютная ошибка округления составляет не более половины интервала, или. Это значение является наибольшим числителем относительной ошибки. Знаменатель в относительной погрешности является число округляется, которое должно быть как можно меньше, чтобы относительная погрешность велика. Поэтому наихудшая относительная ошибка возникает, когда округление применяется к числам в форме, где находится между и. Все эти числа округлены с относительной ошибкой. Максимум происходит, когда он находится на верхнем пределе своего диапазона. В знаменателе можно пренебречь по сравнению с числителем, поэтому его опускают для удобства и просто принимают за машинный эпсилон. Как было показано здесь, относительная ошибка является наихудшей для чисел, которые округляются до, поэтому машинный эпсилон также называется единичным округлением, что означает примерно «максимальную ошибку, которая может возникнуть при округлении до единичного значения». е знак равно 0 {\ displaystyle e = 0} б - ( п - 1 ) / 2 {\ displaystyle b ^ {- (p-1)} / 2} 1 + а {\ displaystyle 1 + a} а {\ displaystyle a} 0 {\ displaystyle 0} б - ( п - 1 ) / 2 {\ displaystyle b ^ {- (p-1)} / 2} 1 {\ displaystyle 1} а / ( 1 + а ) {\ Displaystyle а / (1 + а)} а {\ displaystyle a} 1 + а {\ displaystyle 1 + a} б - ( п - 1 ) / 2 {\ displaystyle b ^ {- (p-1)} / 2} 1 {\ displaystyle 1}

Таким образом, максимальный интервал между нормализованным числом с плавающей запятой и соседним нормализованным числом составляет. Икс {\ displaystyle x} 2 ε | Икс | {\ Displaystyle 2 \ varepsilon | х |}

Арифметическая модель

Численный анализ использует машинный эпсилон для изучения эффектов ошибки округления. Фактические ошибки машинной арифметики слишком сложны для непосредственного изучения, поэтому вместо этого используется следующая простая модель. В стандарте арифметики IEEE говорится, что все операции с плавающей запятой выполняются так, как если бы можно было выполнить операцию с бесконечной точностью, а затем результат округляется до числа с плавающей запятой. Предположим, что (1), являются числами с плавающей точкой, (2) является арифметической операции над числами с плавающей запятой, такие как сложение или умножение, и (3) является бесконечной операции точности. По стандарту компьютер рассчитывает: Икс {\ displaystyle x} у {\ displaystyle y} {\ displaystyle \ bullet} {\ displaystyle \ circ}

Икс у знак равно круглый ( Икс у ) {\ displaystyle x \ bullet y = {\ t_dv {round}} (x \ circ y)}

По смыслу машинного эпсилон относительная ошибка округления не превышает машинного эпсилон по величине, поэтому:

Икс у знак равно ( Икс у ) ( 1 + z ) {\ Displaystyle х \ пуля у = (х \ круг у) (1 + г)}

где по абсолютной величине не больше или u. Можно обратиться к книгам Деммеля и Хайэма в справочных материалах, чтобы увидеть, как эта модель используется для анализа ошибок, например, исключения Гаусса. z {\ displaystyle z} ε {\ Displaystyle \ varepsilon}

Определения вариантов

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

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

Следующее другое определение гораздо более широко распространено за пределами академических кругов: Машинный эпсилон определяется как разница между 1 и следующим большим числом с плавающей запятой. Согласно этому определению, равняется значению единицы на последнем месте относительно 1, т. Е. И единица округления равна u, предполагая режим округления до ближайшего. Распространенность этого определения коренится в его использовании в стандарте ISO C для констант, относящихся к типам с плавающей запятой, и соответствующих констант в других языках программирования. Он также широко используется в программном обеспечении для научных вычислений, а также в числовой и компьютерной литературе. ε {\ Displaystyle \ varepsilon} б - ( п - 1 ) {\ displaystyle b ^ {- (p-1)}} знак равно ε / 2 {\ Displaystyle \, = \ varepsilon / 2}

Как определить машинный эпсилон

Если стандартные библиотеки не обеспечивают предвычисленное значение (как lt; float.h gt; делают с FLT_EPSILON, DBL_EPSILONи LDBL_EPSILONдля C и lt; пределы gt; делает с в C ++), лучший способ определить машины Эпсилона обратиться к таблице, выше, и использовать соответствующая формула мощности. Эпсилон компьютерной машины часто приводится в качестве учебного упражнения. В следующих примерах машинный эпсилон вычисляется в смысле расстояния между числами с плавающей запятой в 1, а не в смысле единичного округления. std::numeric_limitslt;Tgt;::epsilon()

Следует отметить, что результаты зависят от конкретного формата с плавающей точкой, используемым, например, как float, double, long double, или подобно тому, как поддерживается языком программирования, компилятор, и библиотеки времени выполнения для фактической платформы.

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

В строгом смысле термин машинный эпсилон означает точность, напрямую поддерживаемую процессором (или сопроцессором), а не некоторую точность, поддерживаемую конкретным компилятором для конкретной операционной системы, если только не известно, что используется лучший формат. 1 + ε {\ displaystyle 1+ \ varepsilon} 1 + ε {\ displaystyle 1+ \ varepsilon}

Форматы с плавающей запятой IEEE 754 обладают тем свойством, что при повторной интерпретации как целое число с дополнением до двух одинаковой ширины, они монотонно увеличиваются по сравнению с положительными значениями и монотонно уменьшаются по сравнению с отрицательными значениями (см. Двоичное представление 32-битных чисел с плавающей запятой ). У них также есть свойство, и (где вышеупомянутая переинтерпретация целого числа). В языках, которые позволяют использовать каламбур и всегда используют IEEE 754-1985, мы можем использовать это для вычисления машинного эпсилон за постоянное время. Например, в C: 0 lt; | ж ( Икс ) | lt; {\ Displaystyle 0 lt;| е (х) | lt;\ infty} | ж ( Икс + 1 ) - ж ( Икс ) | | ж ( Икс ) - ж ( Икс - 1 ) | {\ Displaystyle | е (х + 1) -f (х) | \ geq | е (х) -f (х-1) |} ж ( Икс ) {\ displaystyle f (x)} Икс {\ displaystyle x}

typedef union { long long i64; double d64; } dbl_64; double machine_eps (double value) { dbl_64 s; s.d64 = value; s.i64++; return s.d64 - value; }

Это даст результат того же знака, что и значение. Если всегда желателен положительный результат, оператор return для machine_eps можно заменить на:

 return (s.i64 lt; 0 ? value - s.d64: s.d64 - value);

64-битные числа с двойной точностью дают 2,220446e-16, что, как и ожидалось, равно 2 −52.

Приближение

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

epsilon = 1.0; while (1.0 + 0.5 * epsilon) ≠ 1.0: epsilon = 0.5 * epsilon
Смотрите также
Примечания и ссылки
  • Андерсон, Э.; Руководство пользователя LAPACK, Общество промышленной и прикладной математики (SIAM), Филадельфия, Пенсильвания, третье издание, 1999 г.
  • Коди, Уильям Дж.; MACHAR: Soubroutine для динамического определения параметров машины, транзакции ACM на математическом программном обеспечении, Vol. 14 (4), 1988, 303-311.
  • Besset, Didier H.; Объектно-ориентированная реализация численных методов, Морган и Кауфманн, Сан-Франциско, Калифорния, 2000.
  • Деммель, Джеймс У., Прикладная числовая линейная алгебра, Общество промышленной и прикладной математики (SIAM), Филадельфия, Пенсильвания, 1997.
  • Higham, Николас Дж.; Точность и стабильность численных алгоритмов, Общество промышленной и прикладной математики (SIAM), Филадельфия, Пенсильвания, второе издание, 2002 г.
  • Press, William H.; Teukolsky, Saul A.; Веттерлинг, Уильям Т.; и Flannery, Brian P.; Числовые рецепты на Фортране 77, 2-е изд., Гл. 20.2, с. 881–886
  • Форсайт, Джордж Э.; Малькольм, Майкл А.; Moler, Cleve B.; "Компьютерные методы математических вычислений", Прентис-Холл, ISBN   0-13-165332-6, 1977
внешние ссылки
Последняя правка сделана 2023-12-31 11:57:56
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте