Объекты с плавающей запятой

type PyFloatObject

Этот подтип PyObject представляет объект с плавающей запятой Python.

PyTypeObject PyFloat_Type
Part of the Стабильный 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)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Создайте объект PyFloatObject на основе строкового значения в str или NULL в случае сбоя.

PyObject *PyFloat_FromDouble(double v)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Создайте объект PyFloatObject из v или NULL в случае сбоя.

double PyFloat_AsDouble(PyObject *pyfloat)
Part of the Стабильный ABI.

Возвращает C double представление содержимого pyfloat. Если pyfloat не является объектом с плавающей запятой Python, но имеет метод __float__(), этот метод сначала будет вызван для преобразования pyfloat в значение с плавающей запятой. Если значение __float__() не определено, то оно возвращается к значению __index__(). При сбое этот метод возвращает значение -1.0, поэтому для проверки на наличие ошибок следует вызвать PyErr_Occurred().

Изменено в версии 3.8: Используйте __index__(), если это возможно.

double PyFloat_AS_DOUBLE(PyObject *pyfloat)

Возвращает C double представление содержимого pyfloat, но без проверки ошибок.

PyObject *PyFloat_GetInfo(void)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Возвращает экземпляр structseq, который содержит информацию о точности, минимальном и максимальном значениях float. Это тонкая оболочка для заголовочного файла float.h.

double PyFloat_GetMax()
Part of the Стабильный ABI.

Возвращает максимально представимое конечное значение с плавающей точкой DBL_MAX в виде C double.

double PyFloat_GetMin()
Part of the Стабильный ABI.

Возвращает минимальное нормализованное положительное значение с плавающей точкой DBL_MIN в виде C double.

Функции упаковки и распаковки

Функции pack и unpack предоставляют эффективный, независимый от платформы способ хранения значений с плавающей запятой в виде байтовых строк. Процедуры упаковки создают строку байтов из C double, а процедуры распаковки создают C double из такой строки байтов. Суффикс (2, 4 или 8) указывает количество байт в строке bytes.

На платформах, которые, по-видимому, используют форматы IEEE 754, эти функции работают путем копирования битов. На других платформах 2-байтовый формат идентичен формату половинной точности IEEE 754 binary16, 4-байтовый формат (32-разрядный) идентичен формату одинарной точности IEEE 754 binary32, а 8-байтовый формат соответствует формату двойной точности IEEE 754 binary64, хотя упаковка отличается использование INFs и 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, unsigned char *p, int le)

Упакуйте C double в двоичный формат половинной точности IEEE 754 binary 16.

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, отличный от нуля, если строка байтов имеет формат с запятой (последний показатель степени равен p+1, p+3 или p+6 и p+7), нулевой, если порядок чисел в конце (сначала экспонента, в p). Константа PY_BIG_ENDIAN может использоваться для использования собственного порядка следования: она равна 1 на процессоре с большим порядком следования или 0 на процессоре с меньшим порядком следования.

Возвращаемое значение: распакованный double. В случае ошибки это -1.0 и PyErr_Occurred() равно true (и установлено исключение, скорее всего, OverflowError).

Обратите внимание, что на платформе, отличной от IEEE, это приведет к отказу в распаковке байтовой строки, представляющей NaN или infinity.

double PyFloat_Unpack2(const unsigned char *p, int le)

Распакуйте двоичный формат IEEE 754 с половинной точностью 16 в формате 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.

Вернуться на верх