Объекты с плавающей точкой
-
type PyFloatObject -
Этот подтип
PyObjectпредставляет объект Python с плавающей точкой.
-
PyTypeObject PyFloat_Type -
Часть Стабильного ABI.
Этот экземпляр
PyTypeObjectпредставляет тип Python с плавающей точкой. Это тот же объект, что иfloatна уровне Python.
-
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__()не определен, выполняется откат к__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.
Функции упаковки и распаковки
Функции упаковки и распаковки предоставляют эффективный платформонезависимый способ хранения значений с плавающей точкой в виде байтовых строк. Процедуры упаковки (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.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.
-
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 может использоваться для использования нативного порядка байтов: она равна 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.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/c-api/float.html