名前空間
変種
操作

operator+,-,*,/ (std::complex)

提供: cppreference.com
< cpp‎ | numeric‎ | complex
 
 
数値演算ライブラリ
一般的な数学関数
特殊な数学関数 (C++17)
数学定数 (C++20)
浮動小数点環境 (C++11)
複素数
数値配列
擬似乱数生成
コンパイル時有理数算術 (C++11)
数値演算アルゴリズム
(C++17)
(C++17)
補間
(C++20)
(C++20)
汎用の数値演算
(C++11)
(C++17)
ビット操作
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
 
 
(1)
template< class T >
std::complex<T> operator+( const std::complex<T>& lhs, const std::complex<T>& rhs);
(C++20未満)
template< class T >
constexpr std::complex<T> operator+( const std::complex<T>& lhs, const std::complex<T>& rhs);
(C++20以上)
(2)
template< class T >
std::complex<T> operator+( const std::complex<T>& lhs, const T& rhs);
(C++20未満)
template< class T >
constexpr std::complex<T> operator+( const std::complex<T>& lhs, const T& rhs);
(C++20以上)
(3)
template< class T >
std::complex<T> operator+( const T& lhs, const std::complex<T>& rhs);
(C++20未満)
template< class T >
constexpr std::complex<T> operator+( const T& lhs, const std::complex<T>& rhs);
(C++20以上)
(4)
template< class T >
std::complex<T> operator-( const std::complex<T>& lhs, const std::complex<T>& rhs);
(C++20未満)
template< class T >
constexpr std::complex<T> operator-( const std::complex<T>& lhs, const std::complex<T>& rhs);
(C++20以上)
(5)
template< class T >
std::complex<T> operator-( const std::complex<T>& lhs, const T& rhs);
(C++20未満)
template< class T >
constexpr std::complex<T> operator-( const std::complex<T>& lhs, const T& rhs);
(C++20以上)
(6)
template< class T >
std::complex<T> operator-( const T& lhs, const std::complex<T>& rhs);
(C++20未満)
template< class T >
constexpr std::complex<T> operator-( const T& lhs, const std::complex<T>& rhs);
(C++20以上)
(7)
template< class T >
std::complex<T> operator*( const std::complex<T>& lhs, const std::complex<T>& rhs);
(C++20未満)
template< class T >
constexpr std::complex<T> operator*( const std::complex<T>& lhs, const std::complex<T>& rhs);
(C++20以上)
(8)
template< class T >
std::complex<T> operator*( const std::complex<T>& lhs, const T& rhs);
(C++20未満)
template< class T >
constexpr std::complex<T> operator*( const std::complex<T>& lhs, const T& rhs);
(C++20以上)
(9)
template< class T >
std::complex<T> operator*( const T& lhs, const std::complex<T>& rhs);
(C++20未満)
template< class T >
constexpr std::complex<T> operator*( const T& lhs, const std::complex<T>& rhs);
(C++20以上)
(10)
template< class T >
std::complex<T> operator/( const std::complex<T>& lhs, const std::complex<T>& rhs);
(C++20未満)
template< class T >
constexpr std::complex<T> operator/( const std::complex<T>& lhs, const std::complex<T>& rhs);
(C++20以上)
(11)
template< class T >
std::complex<T> operator/( const std::complex<T>& lhs, const T& rhs);
(C++20未満)
template< class T >
constexpr std::complex<T> operator/( const std::complex<T>& lhs, const T& rhs);
(C++20以上)
(12)
template< class T >
std::complex<T> operator/( const T& lhs, const std::complex<T>& rhs);
(C++20未満)
template< class T >
constexpr std::complex<T> operator/( const T& lhs, const std::complex<T>& rhs);
(C++20以上)

複素数算術および複素数とスカラーの混合算術のための二項演算子を実装します。 スカラーの引数は、その引数に等しい実部とゼロの虚部を持つ複素数として扱われます。

1-3) 引数の和を返します。
4-6) lhs から rhs を引いた結果を返します。
7-9) 引数を掛けます。
10-12) lhsrhs で割ります。

目次

[編集] 引数

lhs, rhs - 引数。 両方が複素数または片方が複素数で他方が一致する型のスカラー (float, double, long double) のいずれか

[編集] 戻り値

1-3) std::complex<T>(lhs) += rhs
4-6) std::complex<T>(lhs) -= rhs
7-9) std::complex<T>(lhs) *= rhs
10-12) std::complex<T>(lhs) /= rhs

[編集] ノート

テンプレートの実引数推定は暗黙の変換を考慮しないため、これらの演算子は整数と複素数の混合算術のためには使用することができません。 すべての場合において、スカラーは複素数のベースとなる型と同じ型を持たなければなりません。

GCC のフラグ -fcx-limited-range (-ffast-math に含まれます) は浮動小数点のエッジケースに対するチェックを削除することによって複素数の乗除算の動作を変更します。 これはループのベクトル化に影響があります。

[編集]

#include <iostream>
#include <complex>
int main()
{
    std::complex<double> c2(2, 0);
    std::complex<double> ci(0, 1);
 
    std::cout << ci << " + " << c2 << " = " << ci+c2 << '\n'
              << ci << " * " << ci << " = " << ci*ci << '\n'
              << ci << " + " << c2 << " / " << ci << " = " << ci+c2/ci << '\n'
              << 1  << " / " << ci << " = " << 1./ci << '\n';
 
//    std::cout << 1.f/ci; // compile error
//    std::cout << 1/ci; // compile error
}

出力:

(0,1) + (2,0) = (2,1)
(0,1) * (0,1) = (-1,0)
(0,1) + (2,0) / (0,1) = (0,-1)
1 / (0,1) = (0,-1)

[編集] 関連項目

2つの複素数または複素数とスカラーの複合代入
(パブリックメンバ関数) [edit]
複素数に単項演算子を適用します
(関数テンプレート) [edit]