名前空間
変種
操作

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

From cppreference.com
< cpp‎ | numeric‎ | complex
 
 
 
 
(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 - 引数: 両方とも複素数、または一方の複素数ともう一方のスカラー(floatdoublelong 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 <complex>
#include <iostream>
 
int main()
{
    std::complex<double> c2(2.0, 0.0);
    std::complex<double> ci(0.0, 1.0);
 
    std::cout << ci << " + " << c2 << " = " << ci + c2 << '\n'
              << ci << " * " << ci << " = " << ci * ci << '\n'
              << ci << " + " << c2 << " / " << ci << " = " << ci + c2 / ci << '\n'
              << 1  << " / " << ci << " = " << 1.0 / ci << '\n';
 
//    std::cout << 1.0f / 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)

[編集] 関連項目

複素数同士、または複素数とスカラーの複合代入
(public member function) [編集]
複素数に単項演算子を適用する
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)