Документация Python неофициальный перевод
Содержание страницы

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

type PyFloatObject

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

PyTypeObject PyFloat_Type
Часть Stable ABI.

Этот экземпляр PyTypeObject представляет тип с плавающей запятой в Python. Это тот же объект, что и float на уровне Python.

int PyFloat_Check(PyObject *p)

Возвращает истину, если аргумент является PyFloatObject или подтипом PyFloatObject. Эта функция всегда завершается успешно.

int PyFloat_CheckExact(PyObject *p)

Возвращает истину, если аргумент является PyFloatObject, но не подтипом PyFloatObject. Эта функция всегда завершается успешно.

PyObject *PyFloat_FromString(PyObject *str)
Возвращаемое значение: новая ссылка. Часть Stable ABI.

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

PyObject *PyFloat_FromDouble(double v)
Возвращаемое значение: новая ссылка. Часть Stable ABI.

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

double PyFloat_AsDouble(PyObject *pyfloat)
Часть Stable 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)
Возвращаемое значение: новая ссылка. Часть Stable ABI.

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

double PyFloat_GetMax()
Часть Stable ABI.

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

double PyFloat_GetMin()
Часть Stable ABI.

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

Py_INFINITY

Этот макрос раскрывается в константное выражение типа double, представляющее положительную бесконечность.

Он эквивалентен макросу INFINITY из заголовочного файла <math.h> стандарта C11.

Условно устарело с версии 3.15.

Py_NAN

Этот макрос раскрывается в константное выражение типа double, представляющее тихое нечисло (qNaN).

На большинстве платформ он эквивалентен макросу NAN из заголовочного файла <math.h> стандарта C11.

Py_HUGE_VAL

Эквивалентно INFINITY.

Soft deprecated since version 3.14.

Py_MATH_E

Определение (точное для типа double) константы math.e.

Py_MATH_El

Определение константы e с высокой точностью (long double).

Устарело с версии 3.15, будет удалено в версии 3.20.

Py_MATH_PI

Определение (точное для типа double) константы math.pi.

Py_MATH_PIl

Определение константы pi с высокой точностью (long double).

Устарело с версии 3.15, будет удалено в версии 3.20.

Py_MATH_TAU

Определение (точное для типа double) константы math.tau.

Добавлено в версии 3.6.

Py_RETURN_NAN

Возвращает math.nan из функции.

На большинстве платформ это эквивалентно return PyFloat_FromDouble(NAN).

Py_RETURN_INF(sign)

Возвращает math.inf или -math.inf из функции, в зависимости от знака sign.

На большинстве платформ это эквивалентно следующему:

return PyFloat_FromDouble(copysign(INFINITY, sign));
Py_IS_FINITE(X)

Возвращает 1, если переданное число с плавающей запятой X конечно, то есть является нормальным, субнормальным или нулём, но не бесконечностью или NaN. В противном случае возвращает 0.

Мягко устарело с версии 3.14: Используйте isfinite вместо этого.

Py_IS_INFINITY(X)

Возвращает 1, если переданное число с плавающей запятой X является положительной или отрицательной бесконечностью. В противном случае возвращает 0.

Мягко устарело с версии 3.14: Используйте isinf вместо этого.

Py_IS_NAN(X)

Возвращает 1, если переданное число с плавающей запятой X является не-числом (NaN). В противном случае возвращает 0.

Мягко устарело с версии 3.14: Используйте isnan вместо этого.

Функции упаковки и распаковкиPack and Unpack functions

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

  • 2-байтовый формат – это формат половинной точности IEEE 754 binary16.

  • 4-байтовый формат – это формат одинарной точности IEEE 754 binary32.

  • 8-байтовый формат – это формат двойной точности IEEE 754 binary64.

Тип NaN может не сохраняться на некоторых платформах при распаковке (сигнальные NaN становятся тихими NaN), например, на x86-системах в 32-битном режиме.

Предполагается, что тип double имеет формат IEEE 754 binary64 (двойная точность). Что происходит, если это не так, отчасти случайно (увы). На платформах, отличных от IEEE, с большей точностью или бо́льшим динамическим диапазоном, чем поддерживает IEEE 754, можно упаковать не все значения; на платформах с меньшей точностью или меньшим динамическим диапазоном – распаковать не все значения. Упаковка специальных чисел, таких как INF и NaN (если они существуют на платформе), может выполняться некорректно, а попытка распаковать строку байтов, содержащую IEEE INF или NaN, может вызвать исключение.

Добавлено в версии 3.12.

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

Процедуры упаковки записывают 2, 4 или 8 байтов, начиная с p. le – это аргумент типа int; ненулевое значение указывает, что строка байтов должна быть в формате little-endian (порядок от младшего к старшему: экспонента последней, на позициях p+1, p+3 или p+6 и p+7); нулевое – в формате big-endian (экспонента первой, на p). Используйте константу PY_LITTLE_ENDIAN для выбора нативного порядка байтов: она равна 0 на процессоре с прямым порядком байтов (big-endian) и 1 на процессоре с обратным порядком (little-endian).

Возвращаемое значение: 0, если всё в порядке, -1, если произошла ошибка (при этом устанавливается исключение, скорее всего OverflowError).

int PyFloat_Pack2(double x, char *p, int le)

Упаковывает C double в формат IEEE 754 binary16 (половинная точность).

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

Упаковывает C double в формат IEEE 754 binary32 (одинарная точность).

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

Упаковывает C double в формат IEEE 754 binary64 (двойная точность).

Особенности реализации CPython: В CPython эта функция всегда выполняется успешно.

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

Процедуры распаковки читают 2, 4 или 8 байтов, начиная с p. le – это аргумент типа int; ненулевое значение указывает, что строка байтов имеет формат little-endian (экспонента последняя, на позициях p+1, p+3 или p+6 и p+7); нулевое – big-endian (экспонента первая, на p). Используйте константу PY_LITTLE_ENDIAN для выбора нативного порядка байтов: она равна 0 на процессоре с прямым порядком байтов и 1 на процессоре с обратным порядком.

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

Особенности реализации CPython: В CPython эти функции всегда выполняются успешно.

double PyFloat_Unpack2(const char *p, int le)

Распаковывает формат IEEE 754 binary16 (половинная точность) в C double.

double PyFloat_Unpack4(const char *p, int le)

Распаковывает формат IEEE 754 binary32 (одинарная точность) в C double.

double PyFloat_Unpack8(const char *p, int le)

Распаковывает формат IEEE 754 binary64 (двойная точность) в C double.