C++/標準ライブラリ/complex
表示
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 の複素数になります。