Атрибут eps
Атрибут eps класса finfo возвращает
машинную точность (machine epsilon) для конкретного
типа данных с плавающей запятой. Машинная точность
- это наименьшее положительное число ε такое,
что 1.0 + ε != 1.0 в арифметике данного типа.
Это значение характеризует относительную точность
вычислений с числами этого типа.
Атрибут доступен только для экземпляров класса
finfo, которые создаются путём передачи типа
данных (например, float32 или float64)
в конструктор класса finfo.
Синтаксис
np.finfo(dtype).eps
Пример
Давайте получим машинную точность для типа float64
(это стандартный тип для чисел с плавающей запятой
в NumPy):
import numpy as np
eps_value = np.finfo(np.float64).eps
print(eps_value)
Результат выполнения кода:
2.220446049250313e-16
Пример
Теперь получим машинную точность для типа float32
и сравним её с точностью для типа float64:
import numpy as np
eps32 = np.finfo(np.float32).eps
eps64 = np.finfo(np.float64).eps
print(eps32)
print(eps64)
Результат выполнения кода:
1.1920929e-07
2.220446049250313e-16
Как видно, машинная точность для типа float32
значительно больше (то есть грубее), чем для
float64, что соответствует разной точности
этих типов данных.
Пример
Продемонстрируем практический смысл машинной точности.
Попробуем прибавить к единице число, меньшее eps,
и число, равное eps:
import numpy as np
eps = np.finfo(np.float64).eps
res1 = 1.0 + eps / 2
res2 = 1.0 + eps
print(res1 == 1.0)
print(res2 == 1.0)
Результат выполнения кода:
True
False
Прибавление половины машинной точности не меняет
единицу, а прибавление самой eps уже даёт
результат, отличный от единицы.