Spec-Zone.ru › Python 3.13

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

type PyFloatObject

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

PyTypeObject PyFloat_Type
Входит в стабильный ABI.

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

int PyFloat_Check(PyObject *p)

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

int PyFloat_CheckExact(PyObject *p)

Возвращает истину, если аргумент является 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.

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

double PyFloat_GetMin()
Входит в стабильный ABI.

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

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

Функции упаковки и распаковки предоставляют эффективный независимый от платформы способ хранения значений с плавающей точкой в виде строк байтов. Функции упаковки создают строку байтов из C double, а функции распаковки создают 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.11.

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

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

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

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

  • Поведение не определено, если x — NaN или бесконечность.
  • -0.0 и +0.0 создают одинаковую строку байтов.
int PyFloat_Pack2(double x, char *p, int le)

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

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

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

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

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

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

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

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

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

double PyFloat_Unpack2(const char *p, int le)

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

double PyFloat_Unpack4(const char *p, int le)

Распаковывает формат IEEE 754 binary32 с одинарной точностью в значение C double.

double PyFloat_Unpack8(const char *p, int le)

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

© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/c-api/float.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API