РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
459 of 541 menu

Атрибут resolution

Атрибут resolution класса finfo возвращает приблизительную десятичную точность чисел с плавающей запятой для данного типа данных. Это значение показывает, насколько малым может быть изменение числа, чтобы оно все еще было заметно для компьютера. По сути, это десятичный эквивалент машинной точности eps.

Атрибут доступен только для типов с плавающей запятой, таких как float16, float32, float64 и float128. Для целочисленных типов данных использовать finfo нельзя.

Синтаксис

np.finfo(dtype).resolution

Пример

Давайте получим значение разрешения для типа float64:

import numpy as np res = np.finfo(np.float64).resolution print(res)

Результат выполнения кода:

1.0000000000000001e-15

Пример

Давайте сравним разрешение для разных типов данных с плавающей запятой:

import numpy as np res_16 = np.finfo(np.float16).resolution res_32 = np.finfo(np.float32).resolution res_64 = np.finfo(np.float64).resolution print(res_16) print(res_32) print(res_64)

Результат выполнения кода:

0.001 1.0000000000000001e-07 1.0000000000000001e-15

Как видно из примера, чем больше бит используется для представления числа, тем выше его разрешение (точность).

Пример

Давайте посмотрим на практическое применение resolution при сравнении чисел с плавающей запятой:

import numpy as np eps = np.finfo(np.float64).eps res = np.finfo(np.float64).resolution a = 1.0 b = 1.0 + eps / 2 print("eps:", eps) print("resolution:", res) print("a == b:", a == b) print("abs(a - b) < res:", abs(a - b) < res)

Результат выполнения кода:

eps: 2.220446049250313e-16 resolution: 1.0000000000000001e-15 a == b: False abs(a - b) < res: True

Значение resolution примерно в 4-5 раз больше значения eps. Это связано с тем, что resolution учитывает десятичное округление, а eps - двоичное.

Пример

Давайте используем resolution для проверки близости двух чисел при работе с массивом:

import numpy as np rng = np.random.default_rng(0) arr = rng.random(5) arr2 = arr + np.finfo(np.float64).resolution / 3 diff = np.abs(arr - arr2) res = np.finfo(np.float64).resolution print("Array:", arr) print("Array2:", arr2) print("Differences:", diff) print("All differences < resolution:", np.all(diff < res))

Результат выполнения кода:

Array: [0.63696169 0.26978671 0.04097352 0.01652764 0.81327024] Array2: [0.63696169 0.26978671 0.04097352 0.01652764 0.81327024] Differences: [3.33333333e-16 3.33333333e-16 3.33333333e-16 3.33333333e-16 3.33333333e-16] All differences < resolution: True

Смотрите также

  • класс finfo,
    который предоставляет информацию о типах с плавающей запятой
  • атрибут eps,
    который возвращает машинную точность для типа данных
  • атрибут precision,
    который возвращает приблизительное количество десятичных цифр точности
  • атрибут tiny,
    который возвращает минимальное положительное нормализованное число
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить