コンテンツにスキップ

C++/標準ライブラリ/complex

出典: フリー教科書『ウィキブックス(Wikibooks)』

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 の複素数になります。