複素数オブジェクト¶
Python's complex number objects are implemented as two distinct types when viewed from the C API: one is the Python object exposed to Python programs, and the other is a C structure which represents the actual complex number value. The API provides functions for working with both.
C 構造体としての複素数¶
Note that the functions which accept these structures as parameters and return them as results do so by value rather than dereferencing them through pointers. This is consistent throughout the API.
-
type Py_complex¶
The C structure which corresponds to the value portion of a Python complex number object. Most of the functions for dealing with complex number objects use structures of this type as input or output values, as appropriate.
構造体は次のように定義されています。
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 がゼロの場合、この関数はゼロを返し、
errnoにEDOMを設定します。
-
Py_complex _Py_c_pow(Py_complex num, Py_complex exp)¶
num の exp 乗を、C の
Py_complex表現で返します。num がゼロで、exp が正の実数でない場合、この関数はゼロを返し、
errnoにEDOMを設定します。オーバーフロー時は
errnoにERANGEを設定します。
Complex Numbers as Python Objects¶
-
PyTypeObject PyComplex_Type¶
- 次に属します: Stable ABI.
この
PyTypeObjectのインスタンスは Python の複素数型を表現します。 Pythonレイヤのcomplexと同じオブジェクトです。
-
int PyComplex_Check(PyObject *p)¶
引数が
PyComplexObjectかPyComplexObjectのサブタイプであるときに真を返します。この関数は常に成功します。
-
int PyComplex_CheckExact(PyObject *p)¶
引数が
PyComplexObjectであるがPyComplexObjectのサブタイプでないときに真を返します。この関数は常に成功します。
-
PyObject *PyComplex_FromCComplex(Py_complex v)¶
- 戻り値: 新しい参照。
C の
Py_complex値から、新しい Python の複素数オブジェクトを作成します。 エラーの場合は例外を設定してNULLを返します。
-
PyObject *PyComplex_FromDoubles(double real, double imag)¶
- 戻り値: 新しい参照。 次に属します: Stable ABI.
real と imag から新しい
PyComplexObjectオブジェクトを作成して返します。 エラーの場合は例外を設定してNULLを返します。
-
double PyComplex_RealAsDouble(PyObject *op)¶
- 次に属します: Stable ABI.
op の実数部分を C の double 型で返します。
op が Python の複素数オブジェクトでなく、
__complex__()メソッドを持つ場合は、まずこのメソッドを呼び出し、op を Python の複素数オブジェクトに変換します。__complex__()が定義されていなければ、代わりにPyFloat_AsDouble()を呼び出し、その結果を返します。失敗すると、例外を設定して
-1.0を返します。 そのため、エラーの有無を確認するにはPyErr_Occurred()を呼び出してください。バージョン 3.13 で変更: 利用可能なら
__complex__()を使うようになりました。
-
double PyComplex_ImagAsDouble(PyObject *op)¶
- 次に属します: Stable 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)¶
複素数 op の値を
Py_complexとして返します。op が Python の複素数オブジェクトでなく、
__complex__()メソッドを持つ場合は、まずこのメソッドを呼び出し、op を Python の複素数オブジェクトに変換します。__complex__()が定義されていなければ、代わりに__float__()を使います。__float__()も定義されていなければ、代わりに__index__()を使います。失敗すると、例外を設定し、
realを-1.0にしたPy_complexを返します。 そのため、エラーの有無を確認するにはPyErr_Occurred()を呼び出してください。バージョン 3.8 で変更: 可能であれば
__index__()を使うようになりました。