Документация Python неофициальный перевод
Содержание страницы

Объекты с плавающей запятойFloating-Point Objects

type PyFloatObject

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

PyTypeObject PyFloat_Type
Часть Stable ABI.

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

int PyFloat_Check(PyObject *p)

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

int PyFloat_CheckExact(PyObject *p)

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

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

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

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

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

double PyFloat_AsDouble(PyObject *pyfloat)
Часть Stable ABI.

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

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

double PyFloat_AS_DOUBLE(PyObject *pyfloat)

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

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

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

double PyFloat_GetMax()
Часть Stable ABI.

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

double PyFloat_GetMin()
Часть Stable ABI.

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

Функции упаковки и распаковкиPack and Unpack functions

Функции 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 платформах с меньшей точностью или меньшим динамическим диапазоном не все значения можно распаковать. Что происходит в таких случаях, отчасти случайно (увы).

Добавлено в версии 3.12.

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

Функции упаковки записывают 2, 4 или 8 байт, начиная с p. le – это аргумент типа int; ненулевое значение означает, что строку байт нужно в формате little-endian (порядок от младшего к старшему: экспонента последней, на p+1, p+3 или p+6 p+7), ноль – формат big-endian (экспонента первой, на p). Константу PY_BIG_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 (двойная точность).

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

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

Возвращаемое значение: распакованное число double. В случае ошибки возвращается -1.0, а PyErr_Occurred() становится истинным (при этом устанавливается исключение, скорее всего 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.