名前空間
変種
操作

std::complex

提供: cppreference.com
< cpp‎ | numeric
 
 
 
 
ヘッダ <complex> で定義
template< class T >
class complex;
(1)
template<> class complex<float>;
(2)
template<> class complex<double>;
(3)
template<> class complex<long double>;
(4)

特殊化 std::complex<float>, std::complex<double>, std::complex<long double>複素数を表現、操作する LiteralType です。

それ以外の型に対して complex テンプレートを実体化する効果は規定されていません。

目次

[編集] メンバ型

メンバ型 定義
value_type T

[編集] メンバ関数

複素数を構築します
(パブリックメンバ関数) [edit]
内容を代入します
(パブリックメンバ関数) [edit]
複素数の実部にアクセスします
(パブリックメンバ関数) [edit]
複素数の虚部にアクセスします
(パブリックメンバ関数) [edit]
2つの複素数または複素数とスカラーの複合代入
(パブリックメンバ関数) [edit]

[編集] 非メンバ関数

複素数に単項演算子を適用します
(関数テンプレート) [edit]
2つの複素数または複素数とスカラーに対して複素数算術を行います
(関数テンプレート) [edit]
2つの複素数または複素数とスカラーを比較します
(関数テンプレート) [edit]
複素数をシリアライズおよびデシリアライズします
(関数テンプレート) [edit]
実部を返します
(関数テンプレート) [edit]
虚部を返します
(関数テンプレート) [edit]
複素数の絶対値を返します
(関数テンプレート) [edit]
複素数の偏角を返します
(関数テンプレート) [edit]
絶対値の平方を返します
(関数テンプレート) [edit]
複素共役を返します
(関数テンプレート) [edit]
(C++11)
リーマン球面への射影を返します
(関数テンプレート) [edit]
絶対値と偏角から複素数を構築します
(関数テンプレート) [edit]
指数関数
e を底とする複素指数関数
(関数テンプレート) [edit]
負の実軸に沿って分岐切断する複素自然対数
(関数テンプレート) [edit]
負の実軸に沿って分岐切断する複素常用対数
(関数テンプレート) [edit]
冪関数
片方または両方の引数が複素数かもしれない複素冪関数
(関数テンプレート) [edit]
右半平面の範囲の複素数の平方根
(関数テンプレート) [edit]
三角関数
複素数の正弦 (sin(z)) を計算します
(関数テンプレート) [edit]
複素数の余弦 (cos(z)) を計算します
(関数テンプレート) [edit]
複素数の正接 (tan(z)) を計算します
(関数テンプレート) [edit]
複素数の逆正弦 (arcsin(z)) を計算します
(関数テンプレート) [edit]
複素数の逆余弦 (arccos(z)) を計算します
(関数テンプレート) [edit]
複素数の逆正接 (arctan(z)) を計算します
(関数テンプレート) [edit]
双曲線関数
複素数の双曲線正弦 (sh(z)) を計算します
(関数テンプレート) [edit]
複素数の双曲線余弦 (ch(z)) を計算します
(関数テンプレート) [edit]
複素数の双曲線正接を計算します
(関数テンプレート) [edit]
複素数の逆双曲線正弦を計算します
(関数テンプレート) [edit]
複素数の逆双曲線余弦を計算します
(関数テンプレート) [edit]
複素数の逆双曲線正接を計算します
(関数テンプレート) [edit]

[編集] 配列指向アクセス

complex<T> 型の任意のオブジェクト z に対して、 reinterpret_cast<T(&)[2]>(z)[0] は z の実部、 reinterpret_cast<T(&)[2]>(z)[1] は z の虚部です。

complex<T> 配列の要素への任意のポインタ p および任意の有効な配列インデックス i に対して、 reinterpret_cast<T*>(p)[2*i] は複素数 p[i] の実部、 reinterpret_cast<T*>(p)[2*i + 1] は複素数 p[i] の虚部です。

この要件の意図は、 C++ ライブラリの複素数型と C 言語の複素数型 (およびそれらの配列) のバイナリ互換性を維持するためで、それにより同一のオブジェクト表現が要求されるためです。

(C++11およびそれ以降)

[編集] 実装ノート

配列指向アクセスの要件を満たすため、実装は std::complex の特殊化の実部と虚部を別々かつ隣接したメモリ位置に格納する制約を受けます。 非静的メンバのための可能な宣言方法には以下のようなものがあります。

  • 最初の要素に実部を保持し、次の要素に虚部を保持する value_type[2] 型の配列 (Microsoft Visual Studio など)
  • value_type _Complex 型の単一のメンバ (対応する C 言語の複素数型をカプセル化します。 GNU libstdc++ など)
  • それぞれに実部と虚部と保持する、同じメンバアクセスの value_type 型の2つのメンバ (LLVM libc++ など)

実装は実部および虚部以外の記憶域を占める追加の非静的データメンバを宣言することはできず、これらのクラステンプレートの特殊化にいかなるパディングも含まれないことを保証しなければなりません。 実装はまた、 value_type を指すポインタが std::complex の特殊化またはその配列のエイリアスである可能性を、最適化が考慮することも保証しなければなりません。

(C++11およびそれ以降)

[編集] リテラル

名前空間 std::literals::complex_literals で定義
純虚数を表す std::complex リテラル
(関数) [edit]

[編集]

#include <iostream>
#include <iomanip>
#include <complex>
#include <cmath>
 
int main()
{
    using namespace std::complex_literals;
    std::cout << std::fixed << std::setprecision(1);
 
    std::complex<double> z1 = 1i * 1i;     // imaginary unit squared
    std::cout << "i * i = " << z1 << '\n';
 
    std::complex<double> z2 = std::pow(1i, 2); // imaginary unit squared
    std::cout << "pow(i, 2) = " << z2 << '\n';
 
    double PI = std::acos(-1);
    std::complex<double> z3 = std::exp(1i * PI); // Euler's formula
    std::cout << "exp(i * pi) = " << z3 << '\n';
 
    std::complex<double> z4 = 1. + 2i, z5 = 1. - 2i; // conjugates
    std::cout << "(1+2i)*(1-2i) = " << z4*z5 << '\n';
}

出力:

i * i = (-1.0,0.0)
pow(i, 2) = (-1.0,0.0)
exp(i * pi) = (-1.0,0.0)
(1+2i)*(1-2i) = (5.0,0.0)

[編集] 関連項目

複素数算術C言語リファレンス