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