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

float.md

208 строк · 14.9 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.16/c-api/float.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты с плавающей запятой89#### `type PyFloatObject`1011Этот подтип [`PyObject`](https://python-all.ru/3.16/c-api/structures.html#c.PyObject) представляет объект с плавающей запятой в Python.1213#### `PyTypeObject PyFloat_Type`1415*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable).*1617Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.16/c-api/type.html#c.PyTypeObject) представляет тип с плавающей запятой в Python. Это тот же объект, что и [`float`](https://python-all.ru/3.16/library/functions.html#float) на уровне Python.1819#### `int PyFloat_Check(PyObject *p)`2021Возвращает истину, если аргумент является [`PyFloatObject`](https://python-all.ru/3.16/c-api/float.html#c.PyFloatObject) или подтипом `PyFloatObject`. Эта функция всегда завершается успешно.2223#### `int PyFloat_CheckExact(PyObject *p)`2425Возвращает истину, если аргумент является [`PyFloatObject`](https://python-all.ru/3.16/c-api/float.html#c.PyFloatObject), но не подтипом `PyFloatObject`. Эта функция всегда завершается успешно.2627#### `PyObject *PyFloat_FromString(PyObject *str)`2829*Возвращаемое значение: новая ссылка.*3031*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable).*3233Создаёт объект [`PyFloatObject`](https://python-all.ru/3.16/c-api/float.html#c.PyFloatObject) на основе строкового значения *str* или `NULL` в случае ошибки.3435#### `PyObject *PyFloat_FromDouble(double v)`3637*Возвращаемое значение: новая ссылка.*3839*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable).*4041Создаёт объект [`PyFloatObject`](https://python-all.ru/3.16/c-api/float.html#c.PyFloatObject) из *v* или `NULL` в случае ошибки.4243#### `double PyFloat_AsDouble(PyObject *pyfloat)`4445*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable).*4647Возвращает представление содержимого *pyfloat* в виде C double. Если *pyfloat* не является объектом с плавающей запятой Python, но имеет метод [`__float__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__float__), то сначала будет вызван этот метод для преобразования *pyfloat* в число с плавающей запятой. Если `__float__()` не определён, то используется [`__index__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__index__). Этот метод возвращает `-1.0` при неудаче, поэтому следует вызывать [`PyErr_Occurred()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_Occurred) для проверки ошибок.4849Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__index__), если доступно.5051#### `double PyFloat_AS_DOUBLE(PyObject *pyfloat)`5253Возвращает представление содержимого *pyfloat* в виде C double, но без проверки ошибок.5455#### `PyObject *PyFloat_GetInfo(void)`5657*Возвращаемое значение: новая ссылка.*5859*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable).*6061Возвращает экземпляр structseq, содержащий информацию о точности, минимальном и максимальном значениях числа с плавающей запятой. Это тонкая обёртка вокруг заголовочного файла `float.h`.6263#### `double PyFloat_GetMax()`6465*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable).*6667Возвращает максимальное представимое конечное число с плавающей запятой *DBL\_MAX* в виде C double.6869#### `double PyFloat_GetMin()`7071*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable).*7273Возвращает минимальное нормализованное положительное число с плавающей запятой *DBL\_MIN* в виде C double.7475#### `Py_INFINITY`7677Этот макрос раскрывается в константное выражение типа double, представляющее положительную бесконечность.7879Он эквивалентен макросу `INFINITY` из заголовочного файла `<math.h>` стандарта C11.8081[Условно устарело](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) с версии 3.15.8283#### `Py_NAN`8485Этот макрос раскрывается в константное выражение типа double, представляющее тихое нечисло (qNaN).8687На большинстве платформ он эквивалентен макросу `NAN` из заголовочного файла `<math.h>` стандарта C11.8889#### `Py_HUGE_VAL`9091Эквивалентно `INFINITY`.9293[Soft deprecated](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) since version 3.14.9495#### `Py_MATH_E`9697Определение (точное для типа double) константы [`math.e`](https://python-all.ru/3.16/library/math.html#math.e).9899#### `Py_MATH_El`100101Определение константы [`e`](https://python-all.ru/3.16/library/math.html#math.e) с высокой точностью (long double).102103Устарело с версии 3.15, будет удалено в версии 3.20.104105#### `Py_MATH_PI`106107Определение (точное для типа double) константы [`math.pi`](https://python-all.ru/3.16/library/math.html#math.pi).108109#### `Py_MATH_PIl`110111Определение константы [`pi`](https://python-all.ru/3.16/library/math.html#math.pi) с высокой точностью (long double).112113Устарело с версии 3.15, будет удалено в версии 3.20.114115#### `Py_MATH_TAU`116117Определение (точное для типа double) константы [`math.tau`](https://python-all.ru/3.16/library/math.html#math.tau).118119Добавлено в версии 3.6.120121#### `Py_RETURN_NAN`122123Возвращает [`math.nan`](https://python-all.ru/3.16/library/math.html#math.nan) из функции.124125На большинстве платформ это эквивалентно `return PyFloat_FromDouble(NAN)`.126127#### `Py_RETURN_INF(sign)`128129Возвращает [`math.inf`](https://python-all.ru/3.16/library/math.html#math.inf) или `-math.inf` из функции, в зависимости от знака *sign*.130131На большинстве платформ это эквивалентно следующему:132133```c134return PyFloat_FromDouble(copysign(INFINITY, sign));135```136137#### `Py_IS_FINITE(X)`138139Возвращает `1`, если переданное число с плавающей запятой *X* конечно, то есть является нормальным, субнормальным или нулём, но не бесконечностью или NaN. В противном случае возвращает `0`.140141[Мягко устарело](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) с версии 3.14: Используйте `isfinite` вместо этого.142143#### `Py_IS_INFINITY(X)`144145Возвращает `1`, если переданное число с плавающей запятой *X* является положительной или отрицательной бесконечностью. В противном случае возвращает `0`.146147[Мягко устарело](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) с версии 3.14: Используйте `isinf` вместо этого.148149#### `Py_IS_NAN(X)`150151Возвращает `1`, если переданное число с плавающей запятой *X* является не-числом (NaN). В противном случае возвращает `0`.152153[Мягко устарело](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) с версии 3.14: Используйте `isnan` вместо этого.154155## Функции упаковки и распаковки156157Функции упаковки и распаковки предоставляют эффективный платформонезависимый способ хранения чисел с плавающей запятой в виде строк байтов. Функции Pack создают строку байтов из C double, а функции Unpack создают C double из такой строки байтов. Суффикс (2, 4 или 8) указывает количество байтов в строке байтов:158159- 2-байтовый формат – это формат половинной точности IEEE 754 binary16.160- 4-байтовый формат – это формат одинарной точности IEEE 754 binary32.161- 8-байтовый формат – это формат двойной точности IEEE 754 binary64.162163Тип NaN может не сохраняться на некоторых платформах при распаковке (сигнальные NaN становятся тихими NaN), например, на x86-системах в 32-битном режиме.164165Предполагается, что тип double имеет формат IEEE 754 binary64 (двойная точность). Что происходит, если это не так, отчасти случайно (увы). На платформах, отличных от IEEE, с большей точностью или бо́льшим динамическим диапазоном, чем поддерживает IEEE 754, можно упаковать не все значения; на платформах с меньшей точностью или меньшим динамическим диапазоном – распаковать не все значения. Упаковка специальных чисел, таких как INF и NaN (если они существуют на платформе), может выполняться некорректно, а попытка распаковать строку байтов, содержащую IEEE INF или NaN, может вызвать исключение.166167Добавлено в версии 3.12.168169### Функции упаковки170171Процедуры упаковки записывают 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).172173Возвращаемое значение: `0`, если всё в порядке, `-1`, если произошла ошибка (при этом устанавливается исключение, скорее всего [`OverflowError`](https://python-all.ru/3.16/library/exceptions.html#OverflowError)).174175#### `int PyFloat_Pack2(double x, char *p, int le)`176177Упаковывает C double в формат IEEE 754 binary16 (половинная точность).178179#### `int PyFloat_Pack4(double x, char *p, int le)`180181Упаковывает C double в формат IEEE 754 binary32 (одинарная точность).182183#### `int PyFloat_Pack8(double x, char *p, int le)`184185Упаковывает C double в формат IEEE 754 binary64 (двойная точность).186187**Особенности реализации CPython:** В CPython эта функция всегда выполняется успешно.188189### Функции распаковки190191Процедуры распаковки читают 2, 4 или 8 байтов, начиная с *p*. *le* – это аргумент типа int; ненулевое значение указывает, что строка байтов имеет формат little-endian (экспонента последняя, на позициях `p+1`, `p+3` или `p+6` и `p+7`); нулевое – big-endian (экспонента первая, на *p*). Используйте константу `PY_LITTLE_ENDIAN` для выбора нативного порядка байтов: она равна `0` на процессоре с прямым порядком байтов и `1` на процессоре с обратным порядком.192193Возвращаемое значение: распакованное число double. В случае ошибки возвращается `-1.0`, а [`PyErr_Occurred()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_Occurred) становится истинным (при этом устанавливается исключение, скорее всего [`OverflowError`](https://python-all.ru/3.16/library/exceptions.html#OverflowError)).194195**Особенности реализации CPython:** В CPython эти функции всегда выполняются успешно.196197#### `double PyFloat_Unpack2(const char *p, int le)`198199Распаковывает формат IEEE 754 binary16 (половинная точность) в C double.200201#### `double PyFloat_Unpack4(const char *p, int le)`202203Распаковывает формат IEEE 754 binary32 (одинарная точность) в C double.204205#### `double PyFloat_Unpack8(const char *p, int le)`206207Распаковывает формат IEEE 754 binary64 (двойная точность) в C double.208