Документация 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.

Py_NAN

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

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

Py_HUGE_VAL

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

Устарело с версии 3.14: Макрос мягко устарел.

Py_MATH_E

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

Py_MATH_El

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

Py_MATH_PI

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

Py_MATH_PIl

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

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 и unpack предоставляют эффективный независимый от платформы способ хранения чисел с плавающей запятой в виде строк байтов. Процедуры Pack создают строку байтов из C double, а процедуры Unpack создают C double из такой строки байтов. Суффикс (2, 4 или 8) задает количество байтов в строке байтов.

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

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

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

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

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

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

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

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

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.