Spec-Zone.ru › Python 3.11

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

type PyFloatObject

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

PyTypeObject PyFloat_Type
Часть Стабильного API.

Этот экземпляр 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)
Значение возврата: Новая ссылка. Часть Стабильного API.

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

PyObject *PyFloat_FromDouble(double v)
Значение возврата: Новая ссылка. Часть Стабильного API.

Создаёт объект PyFloatObject из v или NULL при ошибке.

double PyFloat_AsDouble(PyObject *pyfloat)
Часть Стабильного API.

Возвращает 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)
Значение возврата: Новая ссылка. Часть Стабильного API.

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

double PyFloat_GetMax()
Часть Стабильного API.

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

double PyFloat_GetMin()
Часть Стабильного API.

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

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

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

На платформах, использующих форматы IEEE 754, эти функции работают путём копирования битов. На других платформах формат 2 байта идентичен формату IEEE 754 binary16 half-precision, формат 4 байта (32-битный) идентичен формату IEEE 754 binary32 single precision, а формат 8 байтов — формату IEEE 754 binary64 double precision, хотя упаковка INFs и NaNs (если они существуют на платформе) обрабатывается некорректно, и попытка распаковки строки байтов, содержащей IEEE INF или NaN, вызовет исключение.

На не-IEEE платформах с большей точностью или большим динамическим диапазоном, чем поддерживает IEEE 754, не все значения могут быть упакованы; на не-IEEE платформах с меньшей точностью или меньшим динамическим диапазоном не все значения могут быть распакованы. То, что происходит в таких случаях, отчасти случайно (к сожалению).

Новое в версии 3.11.

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

Функции упаковки записывают 2, 4 или 8 байтов, начиная с p. le — целочисленный аргумент, ненулевое значение указывает, что строка байтов должна быть в формате 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 half-precision.

int PyFloat_Pack4(double x, unsigned char *p, int le)

Упаковка C double в формате IEEE 754 binary32 single precision.

int PyFloat_Pack8(double x, unsigned char *p, int le)

Упаковка C double в формате IEEE 754 binary64 double precision.

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

Функции распаковки считывают 2, 4 или 8 байтов, начиная с p. le — целочисленный аргумент, ненулевое значение указывает, что строка байтов находится в формате 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() имеет значение true (и установлено исключение, скорее всего, OverflowError).

Обратите внимание, что на не-IEEE платформах эта функция откажется распаковывать строку байтов, представляющую NaN или бесконечность.

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

Распаковка формата IEEE 754 binary16 half-precision в C double.

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

Распаковка формата IEEE 754 binary32 single precision в C double.

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

Распаковка формата IEEE 754 binary64 double precision в C double.

© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/c-api/float.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API