Объекты с плавающей точкой

type PyFloatObject

Этот подтип PyObject представляет объект Python с плавающей точкой.

PyTypeObject PyFloat_Type
Часть Стабильный ABI.

Этот экземпляр PyTypeObject представляет тип Python с плавающей точкой. Это тот же объект, что и float в слое Python.

int PyFloat_Check(PyObject *p)

Возвращает true, если его аргумент является PyFloatObject или подтипом PyFloatObject. Эта функция всегда успешна.

int PyFloat_CheckExact(PyObject *p)

Возвращает true, если его аргумент является PyFloatObject, но не является подтипом PyFloatObject. Эта функция всегда успешна.

PyObject *PyFloat_FromString(PyObject *str)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

Создайте объект PyFloatObject на основе строкового значения в str, или NULL в случае неудачи.

PyObject *PyFloat_FromDouble(double v)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

Создайте объект PyFloatObject из v, или NULL в случае неудачи.

double PyFloat_AsDouble(PyObject *pyfloat)
Часть Стабильный ABI.

Возвращает представление содержимого pyfloat в формате C double. Если pyfloat не является объектом Python с плавающей точкой, но имеет метод __float__(), то сначала будет вызван этот метод для преобразования pyfloat в float. Если __float__() не определен, то он возвращается к __index__(). При неудаче этот метод возвращает -1.0, поэтому для проверки ошибок следует вызвать PyErr_Occurred().

Изменено в версии 3.8: Используйте __index__(), если он доступен.

double PyFloat_AS_DOUBLE(PyObject *pyfloat)

Возвращает представление содержимого pyfloat в формате C double, но без проверки ошибок.

PyObject *PyFloat_GetInfo(void)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

Возвращает экземпляр structseq, содержащий информацию о точности, минимальном и максимальном значениях float. Это тонкая обертка вокруг заголовочного файла float.h.

double PyFloat_GetMax()
Часть Стабильный ABI.

Возвращает максимально представимое конечное число DBL_MAX в виде C double.

double PyFloat_GetMin()
Часть Стабильный ABI.

Возвращает минимальное нормализованное положительное плавающее значение DBL_MIN в виде C double.

Функции упаковки и распаковки

Функции pack и unpack обеспечивают эффективный платформонезависимый способ хранения значений с плавающей точкой в виде байтовых строк. Подпрограммы Pack создают байтовую строку из C double, а подпрограммы Unpack создают C double из такой байтовой строки. Суффикс (2, 4 или 8) определяет количество байтов в байтовой строке.

На платформах, использующих форматы IEEE 754, эти функции работают путем копирования битов. На других платформах 2-байтовый формат идентичен формату половинной точности IEEE 754 binary16, 4-байтовый (32-битный) - формату одинарной точности IEEE 754 binary32, а 8-байтовый - формату двойной точности IEEE 754 binary64, хотя упаковка INF и NaN (если такие существуют на платформе) обрабатывается некорректно, и попытка распаковать байтовую строку, содержащую IEEE INF или NaN, вызовет исключение.

На платформах, не относящихся к IEEE, с большей точностью или большим динамическим диапазоном, чем поддерживает IEEE 754, не все значения могут быть упакованы; на платформах, не относящихся к IEEE, с меньшей точностью или меньшим динамическим диапазоном не все значения могут быть распакованы. То, что происходит в таких случаях, отчасти случайно (увы).

Added in version 3.11.

Функции упаковки

Процедуры упаковки записывают 2, 4 или 8 байт, начиная с p. le - это аргумент int, ненулевой, если вы хотите получить строку байт в формате little-endian (экспонента последняя, по адресу p+1, p+3 или p+6 p+7), нулевой, если вы хотите формат big-endian (экспонента первая, по адресу p). Константа PY_BIG_ENDIAN может быть использована для использования native endian: она равна 1 на процессоре big endian, или 0 на процессоре little endian.

Возвращаемое значение: 0, если все в порядке, -1, если произошла ошибка (и установлено исключение, скорее всего OverflowError).

На платформах, не относящихся к IEEE, есть две проблемы:

  • Что это делает, не определено, если x - NaN или бесконечность.

  • -0.0 и +0.0 создают одну и ту же строку байтов.

int PyFloat_Pack2(double x, unsigned char *p, int le)

Упакуйте C double в формат IEEE 754 binary16 с половинной точностью.

int PyFloat_Pack4(double x, unsigned char *p, int le)

Упакуйте C double в формат одинарной точности IEEE 754 binary32.

int PyFloat_Pack8(double x, unsigned char *p, int le)

Упакуйте C double в формат двойной точности IEEE 754 binary64.

Распаковать функции

Процедуры распаковки считывают 2, 4 или 8 байт, начиная с p. le - это аргумент int, ненулевой, если байтовая строка имеет формат little-endian (экспонента последняя, по адресу p+1, p+3 или p+6 и p+7), нулевой, если big-endian (экспонента первая, по адресу p). Константа PY_BIG_ENDIAN может быть использована для использования native endian: она равна 1 на процессоре big endian, или 0 на процессоре little endian.

Возвращаемое значение: Распакованное двойное значение. При ошибке это значение -1.0, а PyErr_Occurred() - true (и устанавливается исключение, скорее всего OverflowError).

Обратите внимание, что на платформах, отличных от IEEE, эта программа откажется распаковывать байтовую строку, представляющую NaN или бесконечность.

double PyFloat_Unpack2(const unsigned char *p, int le)

Распакуйте формат IEEE 754 binary16 с половинной точностью как C double.

double PyFloat_Unpack4(const unsigned char *p, int le)

Распакуйте формат IEEE 754 binary32 одинарной точности как C double.

double PyFloat_Unpack8(const unsigned char *p, int le)

Распакуйте формат двойной точности IEEE 754 binary64 как C double.