Атрибут nmant
Атрибут nmant класса finfo возвращает количество бит в мантиссе (значащей части числа) для заданного типа данных с плавающей запятой. Это значение характеризует точность представления чисел. Например, для типа float64 мантисса занимает 52 бита (плюс один скрытый бит), а для типа float32 - 23 бита. В отличие от атрибута iexp, который возвращает количество бит в экспоненте, nmant показывает разрядность дробной части числа. Данный атрибут полезен при низкоуровневом анализе числовых типов и при оценке точности вычислений.
Синтаксис
np.finfo(dtype).nmant
Параметры:
-
dtype- тип данных с плавающей запятой, например,float64,float32илиfloat16.
Возвращаемое значение:
-
Целое число (
int) - количество бит в мантиссе для указанного типа.
Пример
Давайте получим количество бит в мантиссе для стандартного типа float64:
import numpy as np
res = np.finfo(np.float64).nmant
print(res)
Результат выполнения кода:
52
Пример
Сравним количество бит в мантиссе для разных типов с плавающей запятой:
import numpy as np
mant_float64 = np.finfo(np.float64).nmant
mant_float32 = np.finfo(np.float32).nmant
mant_float16 = np.finfo(np.float16).nmant
print(mant_float64)
print(mant_float32)
print(mant_float16)
Результат выполнения кода:
52
23
10
Пример
Используем атрибут nmant вместе с nexp для анализа структуры типа:
import numpy as np
dtype = np.float64
info = np.finfo(dtype)
mantissa_bits = info.nmant
exponent_bits = info.nexp
total_bits = info.bits
print(f"Type: {dtype}")
print(f"Mantissa bits: {mantissa_bits}")
print(f"Exponent bits: {exponent_bits}")
print(f"Total bits: {total_bits}")
Результат выполнения кода:
Type: float64
Mantissa bits: 52
Exponent bits: 11
Total bits: 64
Пример
Проверим, как изменяется точность представления чисел в зависимости от количества бит в мантиссе:
import numpy as np
eps64 = np.finfo(np.float64).eps
eps32 = np.finfo(np.float32).eps
mant64 = np.finfo(np.float64).nmant
mant32 = np.finfo(np.float32).nmant
print(f"float64: mantissa={mant64}, eps={eps64}")
print(f"float32: mantissa={mant32}, eps={eps32}")
Результат выполнения кода:
float64: mantissa=52, eps=2.220446049250313e-16
float32: mantissa=23, eps=1.1920929e-07