Значение для epsilon в Python

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

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

Ответ 1

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

>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16

Ответ 2

Как написала strcat, там есть sys.float_info.epsilon.

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

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

Ответ 3

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

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

Ответ 4

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

eps = 1.0
while eps + 1 > 1:
    eps /= 2
eps *= 2
print("The machine precision is:", eps)

В моем случае я получил:

The machine precision is: 2.220446049250313e-16