以降の節では、複素数の作成と操作に使用される演算について説明します。
テンプレート引数は、実数フィールドと虚数フィールドに関連する型定義に使用されます。この引数は、C++ 言語で使用可能な浮動小数点数データ型である float、double、long double のいずれかである必要があります。
このクラスに関連するいくつかのコンストラクタがあります。引数のないコンストラクタは、実数フィールドと虚数フィールドの両方をゼロに初期化します。単一引数を取るコンストラクタは、実数フィールドを特定の値に、虚数フィールドをゼロに初期化します。2 つの引数を取るコンストラクタは、実数フィールドと虚数フィールドの両方を初期化します。コピーコンストラクタを使用すると、複素数を別の複素数から派生した値で初期化することができます。
complex<double> com_one; // 値 0 + 0i complex<double> com_two(3.14); // 値 3.14 + 0i complex<double> com_three(1.5, 3.14) // 値 1.5 + 3.14i complex<double> com_four(com_two); // 値はやはり 3.14 + 0i
複素数には、別の複素数の値を代入することができます。単一引数を取るコンストラクタは変換演算子にも使用できるため、複素数には実数値を代入することもできます。実数フィールドは右辺に変更され、虚数フィールドはゼロに設定されます。
com_one = com_three; // 1.5 + 3.14i になる com_three = 2.17; // 2.17 + 0i になる
関数 polar() を使用して、一定の量と位相角を使用して複素数を作成することができます。
com_four = polar(5.6, 1.8);
共役複素数は、関数 conj() を使用して作成されます。複素数が x + iy を表す場合、共役複素数は値 x - iy を表します。
complex<double> com_five = conj(com_four);
メンバー関数 real() および imag() は、それぞれ複素数の実数フィールドと虚数フィールドを返します。これらの関数は、複素数の引数を取る通常の関数としても呼び出すことができます。
// 以下の 2 つの結果は同じである cout << com_one.real() << "+" << com_one.imag() << "i" << endl; cout << real(com_one) << "+" << imag(com_one) << "i" << endl;
注 : メンバー関数 real() と imag() を例外として、複素数のほとんどの演算は、メンバー関数ではなく通常の関数を使用して実行されます。
算術演算子 +、-、*、/ を使用して、複素数の加算、減算、乗算、除算を実行することができます。4 つの演算子はすべて、2 つの複素数、および複素数と実数値に適用することができます。また、この 4 つすべてに代入演算子を定義することもできます。
cout << com_one + com_two << endl; cout << com_one - 3.14 << endl; cout << 2.75 * com_two << endl; com_one += com_three / 2.0;
単項演算子 + と - は複素数に適用することもできます。
演算子 == と != を使用して、2 つの複素数の等価または不等価を比較することができます。対応するフィールドが等しければ、2 つの値は等価です。複素数は適切に順序付けされないため、他の関係演算子を使用して比較することはできません。
通常のストリーム I/O 規約を使用して、複素数を出力ストリームに書き込んだり、入力ストリームから読み取ることができます。値は、虚数値がゼロかどうかによって、(u) や (u,v) のように括弧の中に書き込まれます。値は、2 つの数値を囲む 1 対の括弧として読み取られます。
関数 norm() は、複素数のノルムを返します。これは、実数部と虚数部の平方の合計です。関数 abs() は、ノルムの平方根である絶対値を返します。複素数値を引数に使用するのはいすれも通常の関数であり、メンバー関数ではないことに注意してください。
cout << norm(com_two) << endl; cout << abs(com_two) << endl;
複素数の有向位相角は、関数 arg() によって算出されます。
cout << com_four << " in polar coordinates is " << arg(com_four) << " and " << norm(com_four) << endl;
浮動小数点値に定義された三角関数は、すべて引数に複素数を使用できるように拡張されました。これらの関数は sin()、cos()、tan()、sinh()、 cosh()、tanh() です。それぞれ単一の複素数を引数として使用し、結果として複素数を返します。
超越関数 exp()、log()、log10()、sqrt() は、引数に複素数を使用できるように拡張されました。それぞれ単一の複素数を引数として使用し、結果として複素数を返します。
標準 C++ ライブラリでは、指数関数 pow() のバリエーションをいくつか定義しています。 複素数を整数でべき乗するもの、複素数を複素数や実数でべき乗するもの、実数値を複素数でべき乗するものなどがあります。