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