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

Атрибут nexp

Атрибут nexp класса finfo возвращает количество бит, используемых для хранения экспоненты в представлении чисел с плавающей точкой. Вместе с количеством бит мантиссы (доступным через атрибут nmant) это определяет точность и диапазон чисел, которые может представлять данный тип. Для стандартного типа float32 (IEEE 754 single precision) экспонента занимает 8 бит, для float64 (double precision) - 11 бит. Это значение необходимо для понимания динамического диапазона типа данных.

Синтаксис

finfo.nexp

Атрибут доступен только для чтения и возвращает целое число int.

Пример для float32 и float64

Получим количество бит в экспоненте для разных типов:

import numpy as np f32 = np.finfo(np.float32) f64 = np.finfo(np.float64) print("float32:") print(" nexp:", f32.nexp) print(" nmant:", f32.nmant) print(" bits:", f32.bits) print() print("float64:") print(" nexp:", f64.nexp) print(" nmant:", f64.nmant) print(" bits:", f64.bits)

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

float32: nexp: 8 nmant: 23 bits: 32 float64: nexp: 11 nmant: 52 bits: 64

У float32 экспонента занимает 8 бит, у float64 - 11 бит.

Пример с вычислением диапазона

Количество бит в экспоненте определяет максимальное значение, которое можно представить. Проверим связь между nexp и максимальным значением:

import numpy as np f = np.finfo(np.float32) # Максимальное значение примерно равно (2 - 2^(-nmant)) * 2^(2^(nexp-1) - 1) print("float32 nexp:", f.nexp) print("float32 max:", f.max) print("Количество бит экспоненты для float32:", f.nexp)

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

float32 nexp: 8 float32 max: 3.4028234663852886e+38 Количество бит экспоненты для float32: 8

Данный диапазон достигается благодаря 8 битам экспоненты.

Пример сравнения типов

Сравним характеристики различных типов с плавающей точкой:

import numpy as np types = [np.float16, np.float32, np.float64] print("Тип | nexp | nmant | bits") print("------|------|-------|-----") for dt in types: f = np.finfo(dt) print(f"{dt.__name__:5} | {f.nexp:4} | {f.nmant:5} | {f.bits:4}")

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

Тип | nexp | nmant | bits ------|------|-------|----- float16 | 5 | 10 | 16 float32 | 8 | 23 | 32 float64 | 11 | 52 | 64

С увеличением разрядности растет как количество бит в экспоненте, так и в мантиссе.

Пример с расчетом смещения экспоненты

Зная nexp, можно вычислить смещение (bias) экспоненты для данного типа:

import numpy as np f = np.finfo(np.float32) bias = 2**(f.nexp - 1) - 1 print(f"float32: nexp = {f.nexp}") print(f"Смещение (bias): {bias}") print(f"Максимальная экспонента: {bias + 1}") print(f"Минимальная экспонента: {1 - bias}")

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

float32: nexp = 8 Смещение (bias): 127 Максимальная экспонента: 128 Минимальная экспонента: -126

Эти значения соответствуют стандарту IEEE 754 для типа single precision.

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

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