C++ 標準ライブラリヘッダー <complex>
解説
編集
このセクションでは、C++ 標準ライブラリに含まれるヘッダー <complex>
について説明します。このヘッダーは、複素数を表現するためのテンプレートクラス complex
と、複素数の演算や関数を提供しています。
28.4.1 概要 (General)
編集<complex>
ヘッダーは、complex
というテンプレートクラスと、複素数を扱うための様々な関数を定義しています。- このテンプレートに浮動小数点型以外の型を指定した場合、動作は未定義です。
- 関数の計算結果が数学的に定義できない値になったり、その型の表現可能な範囲外になった場合、プログラムの動作は未定義になります。
- オブジェクト
z
(型はcv complex
) をreinterpret_cast
を使って分割アクセスすることができ、reinterpret_cast(z)[0]
が実部、reinterpret_cast(z)[1]
が虚部に対応します。また、配列a
(型はcv complex*
)に対してa[i]
が有効な式の場合、reinterpret_cast(a)[2*i]
が実部、reinterpret_cast(a)[2*i + 1]
が虚部に対応します。
注意: このように reinterpret_cast
を用いたアクセスは推奨されません。あくまで仕様として存在する挙動です。
28.4.2 ヘッダー概要 (Synopsis)
編集- C++
namespace std {
template class complex;
// ... (他の関数や型)
}
complex
はテンプレートクラスで、複素数を表現します。
28.4.3 クラステンプレート complex (complex)
編集complex
クラスは、複素数の 実部 (real()) と 虚部 (imag()) を保持するオブジェクトを表します。
メンバ関数
complex(const T& re = T(), const T& im = T())
: コンストラクタ。引数に実部と虚部をとります (省略可)。real() const
: 実部を返します。real(T val)
: 実部をval
に設定します。imag() const
: 虚部を返します。imag(T val)
: 虚部をval
に設定します。
*メンバ演算子 (+=, -=, =, /=)
- これらの演算子を使って、複素同士の加減乗除や、複素数とスカラー値との演算が可能です。
28.4.6 非メンバ関数 (complex.ops)
編集- 複素同士の比較 (
==
) や、入出力ストリーム (<<
,>>
) をFriend関数などが用意されています。
28.4.7 値演算 (complex.value.ops)
編集real(const complex& x)
: 複素数x
の実部を返します。imag(const complex& x)
: 複素数x
の虚部を返します。abs(const complex& x)
: 複素数x
の絶対値を返します。arg(const complex& x)
: 複素数x
の偏角を返します。norm(const complex& x)
: 複素数x
の絶対値の2乗を返します。conj(const complex& x)
: 複素共役 (虚部の符号反転) を返します。proj(const complex& x)
: リーマン球面への射影を行います (詳細は規格を参照)。polar(const T& rho, const T& theta = T())
:大きさrho
と偏角theta
を持つ複素数を生成します。
28.4.8超越関数 (complex.transcendentals)
編集sin
,cos
,tan
などの複素版三角関数や、指数関数、対数関数など様々な超越関数が用意されています。これらの関数は、対応する実数関数と同様の計算を複素数に対して行います。
28.4.10 複素数リテラルのサフィックス (complex.literals)
編集i
,il
,if
というサフィックスを使って、リテラルで簡単に複素数を表現できます。例えば、2.0i
は実部が 0.0、虚部が 2.0 の複素数になります。