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