Spec-Zone.ru › Python 3.14

Объекты комплексных чисел

С точки зрения C API комплексные числа Python реализованы в виде двух различных типов: один — это объект Python, доступный программам на Python, а другой — структура C, представляющая фактическое значение комплексного числа. API предоставляет функции для работы с обоими типами.

Комплексные числа в виде структур C

Обратите внимание, что функции, принимающие такие структуры в качестве параметров и возвращающие их в качестве результатов, делают это по значению, а не разыменовывая их через указатели. Это правило соблюдается во всём API.

type Py_complex

Структура C, соответствующая части значения объекта комплексного числа Python. Большинство функций для работы с объектами комплексных чисел используют структуры этого типа в качестве входных или выходных значений, в зависимости от ситуации.

double real
double imag

Структура определена следующим образом:

typedef struct {
    double real;
    double imag;
} Py_complex;
Py_complex _Py_c_sum(Py_complex left, Py_complex right)

Возвращает сумму двух комплексных чисел, используя представление C Py_complex.

Py_complex _Py_c_diff(Py_complex left, Py_complex right)

Возвращает разность двух комплексных чисел, используя представление C Py_complex.

Py_complex _Py_c_neg(Py_complex num)

Возвращает число, противоположное комплексному числу num, используя представление C Py_complex.

Py_complex _Py_c_prod(Py_complex left, Py_complex right)

Возвращает произведение двух комплексных чисел, используя представление C Py_complex.

Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)

Возвращает частное двух комплексных чисел, используя представление C Py_complex.

Если divisor равен null, этот метод возвращает ноль и устанавливает errno в EDOM.

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)

Возвращает результат возведения num в степень exp, используя представление C Py_complex.

Если num равен null, а exp не является положительным вещественным числом, этот метод возвращает ноль и устанавливает errno в EDOM.

При переполнении устанавливает errno в ERANGE.

Комплексные числа в виде объектов Python

type PyComplexObject

Этот подтип PyObject представляет объект комплексного числа Python.

PyTypeObject PyComplex_Type
Часть стабильного ABI.

Этот экземпляр PyTypeObject представляет тип комплексных чисел Python. На уровне Python это тот же объект, что и complex.

int PyComplex_Check(PyObject *p)

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

int PyComplex_CheckExact(PyObject *p)

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

PyObject *PyComplex_FromCComplex(Py_complex v)
Возвращаемое значение: новая ссылка.

Создаёт новый объект комплексного числа Python из значения C Py_complex. При ошибке возвращает NULL и устанавливает исключение.

PyObject *PyComplex_FromDoubles(double real, double imag)
Возвращаемое значение: новая ссылка. Часть стабильного ABI.

Возвращает новый объект PyComplexObject, созданный из real и imag. При ошибке возвращает NULL и устанавливает исключение.

double PyComplex_RealAsDouble(PyObject *op)
Часть стабильного ABI.

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

Если op не является объектом комплексного числа Python, но имеет метод __complex__(), этот метод сначала вызывается для преобразования op в объект комплексного числа Python. Если __complex__() не определён, вместо этого вызывается PyFloat_AsDouble(), и возвращается его результат.

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

Изменено в версии 3.13: Используется __complex__(), если он доступен.

double PyComplex_ImagAsDouble(PyObject *op)
Часть стабильного ABI.

Возвращает мнимую часть op как значение C-типа double.

Если op не является объектом комплексного числа Python, но имеет метод __complex__(), этот метод сначала вызывается для преобразования op в объект комплексного числа Python. Если __complex__() не определён, вместо этого вызывается PyFloat_AsDouble(), и в случае успеха возвращается 0.0.

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

Изменено в версии 3.13: Используется __complex__(), если он доступен.

Py_complex PyComplex_AsCComplex(PyObject *op)

Возвращает значение Py_complex комплексного числа op.

Если op не является объектом комплексного числа Python, но имеет метод __complex__(), этот метод сначала вызывается для преобразования op в объект комплексного числа Python. Если __complex__() не определён, вместо этого используется __float__(). Если __float__() не определён, вместо этого используется __index__().

В случае ошибки этот метод возвращает Py_complex со значением -1.0 в real и установленным исключением, поэтому для проверки наличия ошибок следует вызвать PyErr_Occurred().

Изменено в версии 3.8: Используется __index__(), если он доступен.

© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/c-api/complex.html

Spec-Zone.ru

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