WikiDer > Машина эпсилон
Машина эпсилон дает верхнюю оценку относительная ошибка из-за округление в арифметика с плавающей запятой. Эта величина характеризует компьютерная арифметика в области числовой анализ, и, соответственно, в теме вычислительная наука. Количество также называется мачепс или же округление единицы, и в нем есть символы греческого эпсилон или жирный Роман ты, соответственно.
Значения для стандартной аппаратной арифметики с плавающей запятой
Следующие значения машинного эпсилон применяются к стандартным форматам с плавающей запятой:
IEEE 754 - 2008 г. | Распространенное имя | Тип данных C ++ | Основание | Точность | Машина эпсилон[а] | Машина эпсилон[b] |
---|---|---|---|---|---|---|
двоичный16 | половинная точность | Нет данных | 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[1] | 2 | 64 | 2−64 ≈ 5,42e-20 | 2−63 ≈ 1.08e-19 | |
двоичный128 | четверная (ruple) точность | _float128[1] | 2 | 113 (один бит неявный) | 2−113 ≈ 9,63e-35 | 2−112 ≈ 1,93e-34 |
десятичный32 | десятичная дробь одинарной точности | _Decimal32[2] | 10 | 7 | 5 × 10−7 | 10−6 |
десятичный64 | десятичная дробь с двойной точностью | _Decimal64[2] | 10 | 16 | 5 × 10−16 | 10−15 |
десятичный128 | четверная (ruple) точность десятичная | _Decimal128[2] | 10 | 34 | 5 × 10−34 | 10−33 |
Формальное определение
Округление - процедура выбора представления настоящий номер в плавающая точка система счисления. Для система счисления и процедура округления, машинный эпсилон - максимальное относительная ошибка выбранной процедуры округления.
Необходим некоторый фон, чтобы определить значение из этого определения. Система счисления с плавающей запятой характеризуется основание которую еще называют базой, , и точность , то есть число цифры значимое (включая любой начальный неявный бит). Все числа с одинаковыми показатель степени, , есть интервал, . Интервал изменяется на числах, которые являются полной степенью ; интервал на стороне большего величина является раз больше, чем интервал на стороне меньшей величины.
Поскольку машинный эпсилон является пределом относительной ошибки, достаточно рассматривать числа с показателем . Также достаточно рассматривать положительные числа. Для обычного способа округления от округления до ближайшего абсолютная ошибка округления составляет не более половины интервала или . Это значение является наибольшим числителем относительной ошибки. В знаменатель в относительной ошибке - округляемое число, которое должно быть как можно меньше, чтобы относительная ошибка была большой. Поэтому наихудшая относительная ошибка возникает, когда округление применяется к числам в форме куда между и . Все эти числа округляются до с относительной ошибкой . Максимум происходит, когда находится в верхней части своего диапазона. В в знаменателе пренебрежимо мало по сравнению с числителем, поэтому его опущено для удобства и просто за машинный эпсилон. Как было показано здесь, относительная ошибка наихудшая для чисел, которые округляются до , поэтому машина epsilon также называется округление единицы это примерно означает «максимальную ошибку, которая может возникнуть при округлении до единицы».
Таким образом, максимальный интервал между нормализованным числом с плавающей запятой, , а соседнее нормализованное число Икс .[3]
Арифметическая модель
Численный анализ использует машинный эпсилон для изучения эффектов ошибки округления. Фактические ошибки машинной арифметики слишком сложны для непосредственного изучения, поэтому вместо этого используется следующая простая модель. Стандарт арифметики IEEE гласит, что все операции с плавающей запятой выполняются так, как если бы можно было выполнить операцию с бесконечной точностью, а затем результат округляется до числа с плавающей запятой. Предположим (1) , числа с плавающей запятой, (2) это арифметическая операция над числами с плавающей запятой, такая как сложение или умножение, и (3) - операция бесконечной точности. По стандарту компьютер рассчитывает:
По смыслу машинного эпсилон относительная ошибка округления не превышает машинного эпсилон по величине, поэтому:
куда по абсолютной величине не более или же ты. Можно обратиться к книгам Деммеля и Хайэма в справочных материалах, чтобы увидеть, как эта модель используется для анализа ошибок, например, исключения Гаусса.
Определения вариантов
Стандарт IEEE не определяет термины машина эпсилон и округление единицы, поэтому используются разные определения этих терминов, что может вызвать некоторую путаницу.
Приведенное здесь определение машина эпсилон используется проф. Джеймс Деммел в сценариях лекций[4], то ЛАПАК пакет линейной алгебры,[5] числовые научные статьи[6] и некоторое программное обеспечение для научных вычислений.[7] Большинство численных аналитиков используют слова машина эпсилон и округление единицы взаимозаменяемо с этим значением.
Следующее другое определение гораздо более распространено за пределами академических кругов: Машинный эпсилон определяется как разница между 1 и следующим большим числом с плавающей запятой. По этому определению равняется стоимости единица на последнем месте относительно 1, т.е. ,[8] и единичное округление ты, предполагая режим округления до ближайшего. Распространенность этого определения коренится в его использовании в стандарте ISO C для констант, относящихся к типам с плавающей запятой.[9][10] и соответствующие константы в других языках программирования.[11][12] Он также широко используется в программном обеспечении для научных вычислений,[13][14][15] и в числовой и вычислительной литературе[16][17][18][19].
Как определить машинный эпсилон
Если стандартные библиотеки не предоставляют предварительно вычисленных значений (как <float.h> делает с FLT_EPSILON
, DBL_EPSILON
и LDBL_EPSILON
для C и <пределы> делает с std :: numeric_limits <Т> :: эпсилон ()
в C ++), лучший способ определить машинный эпсилон - это обратиться к таблице выше и использовать соответствующую формулу мощности. Эпсилон компьютерной машины часто используется в качестве учебного упражнения. В следующих примерах машинный эпсилон вычисляется в смысле расстояния между числами с плавающей запятой в 1, а не в смысле единичного округления.
Обратите внимание, что результаты зависят от конкретного используемого формата с плавающей запятой, например плавать, двойной, длинный двойнойили аналогичные, поддерживаемые языком программирования, компилятором и библиотекой времени выполнения для реальной платформы.
Некоторые форматы, поддерживаемые процессором, могут не поддерживаться выбранным компилятором и операционной системой. Библиотека времени выполнения может эмулировать другие форматы, включая арифметика произвольной точности доступно на некоторых языках и в библиотеках.
В строгом смысле термин машина эпсилон означает 1 + eps точность напрямую поддерживается процессором (или сопроцессором), а не некоторыми 1 + eps точность, поддерживаемая конкретным компилятором для конкретной операционной системы, если только не известно, что он использует лучший формат.
IEEE 754 Форматы с плавающей запятой обладают тем свойством, что при повторной интерпретации как целое число с дополнением до двух одинаковой ширины, они монотонно увеличиваются по сравнению с положительными значениями и монотонно уменьшаются по сравнению с отрицательными значениями (см. двоичное представление 32-битных чисел с плавающей запятой). Они также обладают тем свойством, что 0 <|ж(Икс) | <∞, и |ж(Икс+1) − ж(Икс)| ≥ |ж(Икс) − ж(Икс−1) | (куда ж(Икс) - вышеупомянутая целочисленная интерпретация Икс). На языках, которые позволяют набирать текст и всегда использовать IEEE 754-1985, мы можем использовать это для вычисления машинного эпсилон за постоянное время. Например, в C:
typedef союз { длинный длинный i64; двойной d64;} dbl_64;двойной machine_eps (двойной ценить){ dbl_64 s; s.d64 = ценить; s.i64++; возвращаться s.d64 - ценить;}
Это даст результат того же знака, что и значение. Если всегда желателен положительный результат, оператор return для machine_eps можно заменить на:
возвращаться (s.i64 < 0 ? ценить - s.d64 : s.d64 - ценить);
64-битные числа типа double дают 2.220446e-16, что равно 2−52 как и ожидалось.
Приближение
Следующий простой алгоритм может быть использован для аппроксимации машинного эпсилон с точностью до двух раз (один порядок величины) истинного значения, используя линейный поиск.
epsilon = 1.0; в то время как (1.0 + 0.5 * epsilon) ≠ 1.0: epsilon = 0.5 * epsilon
Смотрите также
- Плавающая точка, общее обсуждение вопросов точности в арифметике с плавающей запятой
- Единица на последнем месте (ULP)
Примечания и ссылки
- ^ а б Плавающие типы - Использование коллекции компиляторов GNU (GCC)
- ^ а б c Decimal Float - Использование коллекции компиляторов GNU (GCC)
- ^ Хайэм, Николас (2002). Точность и стабильность численных алгоритмов (2-е изд.). СИАМ. п. 37.
- ^ «Основные вопросы арифметики с плавающей запятой и анализа ошибок». 21 октября 1999 г.. Получено 11 апреля 2013.
- ^ "Руководство пользователя LAPACK, третье издание". 22 августа 1999 г.. Получено 9 марта 2012.
- ^ "Дэвид Голдберг: что должен знать каждый компьютерный ученый об арифметике с плавающей запятой, ACM Computing Surveys, том 23, № 1, март 1991 г." (PDF). Получено 11 апреля 2013.
- ^ «Документация Scilab - number_properties - определение параметров с плавающей запятой». Получено 11 апреля 2013.
- ^ обратите внимание, что здесь p определяется как точность, то есть общее количество бит в мантиссе, включая неявный начальный бит, как используется в таблице выше
- ^ Джонс, Дерек М. (2009). Новый стандарт C - экономический и культурный комментарий (PDF). п. 377.
- ^ "Ссылка на float.h на cplusplus.com". Получено 11 апреля 2013.
- ^ "Ссылка на std :: numeric_limits на cplusplus.com". Получено 11 апреля 2013.
- ^ «Документация Python - Системные параметры и функции». Получено 11 апреля 2013.
- ^ "Документация по системе Mathematica: $ MachineEpsilon". Получено 11 апреля 2013.
- ^ "Документация Matlab - eps - Относительная точность с плавающей запятой". Архивировано из оригинал на 2013-08-07. Получено 11 апреля 2013.
- ^ «Октавная документация - функция eps». Получено 11 апреля 2013.
- ^ Хайэм, Николас (2002). Точность и стабильность численных алгоритмов (2-е изд.). СИАМ. С. 27–28.
- ^ Quarteroni, Alfio; Сакко, Риккардо; Салери, Фаусто (2000). Вычислительная математика (PDF). Springer. п. 49. ISBN 0-387-98959-5. Архивировано из оригинал (PDF) на 2017-11-14. Получено 2013-04-11.
- ^ Press, William H .; Teukolsky, Saul A .; Веттерлинг, Уильям Т .; Фланнери, Брайан П. Числовые рецепты. п. 890.
- ^ Энгельн-Мюльгес, Гизела; Ройтер, Фриц (1996). Numerik-Algorithmen. п. 6. ISBN 3-18-401539-4.
- Андерсон, Э .; Руководство пользователя LAPACK, Общество промышленной и прикладной математики (SIAM), Филадельфия, Пенсильвания, третье издание, 1999 г.
- Коди, Уильям Дж .; MACHAR: Soubroutine для динамического определения параметров машины, Транзакции ACM на математическом программном обеспечении, Vol. 14 (4), 1988, 303-311.
- Besset, Didier H .; Объектно-ориентированная реализация численных методов, Морган и Кауфманн, Сан-Франциско, Калифорния, 2000.
- Деммель, Джеймс У., Прикладная числовая линейная алгебра, Общество промышленной и прикладной математики (SIAM), Филадельфия, Пенсильвания, 1997.
- Хайэм, Николас Дж .; Точность и стабильность численных алгоритмов, Общество промышленной и прикладной математики (SIAM), Филадельфия, Пенсильвания, второе издание, 2002 г.
- Press, William H .; Teukolsky, Saul A .; Веттерлинг, Уильям Т .; и Flannery, Brian P .; Числовые рецепты в Fortran 77, 2-е изд., Гл. 20.2, с. 881–886
- Форсайт, Джордж Э .; Малькольм, Майкл А .; Moler, Cleve B .; "Компьютерные методы математических вычислений", Прентис-Холл, ISBN 0-13-165332-6, 1977
внешняя ссылка
- MACHAR, процедура (в C и Fortran) для «динамического вычисления машинных констант» (алгоритм 722 ACM)
- Диагностика точности вычислений с плавающей запятой, Внедрение MACHAR в Компонент Паскаль и Оберон основан на версии MACHAR для Fortran 77, опубликованной в Numerical Recipes (Press et al., 1992).