Объекты с плавающей точкой
-
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