Объекты с плавающей точкой
-
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__()не определен, то используется__index__(). Данный метод возвращает-1.0в случае неудачи, поэтому необходимо проверить наличие ошибок с помощьюPyErr_Occurred().Изменено в версии 3.8: Используется
__index__(), если доступно.
-
double PyFloat_AS_DOUBLE(PyObject *pyfloat) -
Возвращает представление значения pyfloat в виде C double, но без проверки ошибок.
-
PyObject *PyFloat_GetInfo(void) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Возвращает экземпляр structseq, содержащий информацию о точности, минимальном и максимальном значениях числа с плавающей точкой. Это тонкий обёртку над заголовочным файлом
float.h.
-
double PyFloat_GetMax() -
Часть Стабильной ABI.
Возвращает максимальное представимое конечное значение с плавающей точкой DBL_MAX в виде C double.
-
double PyFloat_GetMin() -
Часть Стабильной ABI.
Возвращает минимальное нормализованное положительное значение с плавающей точкой DBL_MIN в виде C double.
Функции упаковки и распаковки
Функции упаковки и распаковки предоставляют эффективный независимый от платформы способ хранения значений с плавающей точкой в виде строковых представлений байтов. Функции упаковки преобразуют C double в строку байтов, а функции распаковки преобразуют строку байтов в C double. Суффикс (2, 4 или 8) определяет количество байтов в строке байтов.
На платформах, использующих форматы IEEE 754, эти функции работают путём копирования битов. На других платформах формат с 2 байтами идентичен формату IEEE 754 binary16 half-precision, формат с 4 байтами (32 бита) идентичен формату IEEE 754 binary32 single precision, а формат с 8 байтами (64 бита) формату IEEE 754 binary64 double precision, хотя обработка INFs и NaNs (если такие существуют на платформе) не выполняется корректно, и попытка распаковки строки байтов, содержащей IEEE INF или NaN, вызовет исключение.
На платформах, не использующих IEEE, с большей точностью или большим динамическим диапазоном, чем поддерживает IEEE 754, не все значения могут быть упакованы; на платформах, не использующих IEEE, с меньшей точностью или меньшим динамическим диапазоном, не все значения могут быть распакованы. То, что происходит в таких случаях, отчасти случайно.
Добавлена в версии 3.11.
Функции упаковки
Функции упаковки записывают 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 half-precision.
-
int PyFloat_Pack4(double x, unsigned char *p, int le) -
Упаковывает C double как формат IEEE 754 binary32 single precision.
-
int PyFloat_Pack8(double x, unsigned char *p, int le) -
Упаковывает C double как формат IEEE 754 binary64 double precision.
Функции распаковки
Функции распаковки считывают 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 half-precision как C double.
-
double PyFloat_Unpack4(const unsigned char *p, int le) -
Распаковывает формат IEEE 754 binary32 single precision как C double.
-
double PyFloat_Unpack8(const unsigned char *p, int le) -
Распаковывает формат IEEE 754 binary64 double precision как C double.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/c-api/float.html