Содержание страницы
Объекты с плавающей запятой¶Floating-Point Objects
-
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.