Значение для эпсилон в Python - PullRequest
48 голосов
/ 02 марта 2012

Существует ли стандартное значение (или способ получения) эпсилона в Python?Мне нужно сравнить значения с плавающей запятой и сравнить с наименьшей возможной разницей.

В C ++ предусмотрена функция numeric_limits::epsilon( ), которая дает значение epsilon для любого данного типа данных.Есть ли эквивалент в Python?

Ответы [ 3 ]

100 голосов
/ 02 марта 2012

Информация доступна в sys.float_info, что соответствует значению float.h в C99.

>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16
26 голосов
/ 02 марта 2012

Поскольку strcat отправил , есть sys.float_info.epsilon.

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

Если вы считаете, что вам нужен переподготовка, стандартным справочником является , который должен знать каждый компьютерный ученый об арифметике с плавающей точкой , или для более простого обзора вы можете проверить Floating Point Руководство .

2 голосов
/ 02 марта 2018

Удивлен, никто не упомянул об этом здесь; Я думаю, что многие люди вместо этого будут использовать numpy.finfo (тип (переменная)) .eps . Или .resolution, если нужно оценить точность.

Обратите внимание, что finfo только для типов с плавающей запятой и что он также работает с собственным типом float в Python (т.е. не ограничивается типами numpy). Эквивалент для целочисленных типов - iinfo, хотя он не содержит точной информации (потому что, ну, зачем это?).

...