operator+,-,*,/ (std::complex) - cppreference.com
提供: cppreference.com
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
| (1) | ||
|
|
(C++20未満) | |
|
|
(C++20以上) | |
| (2) | ||
|
|
(C++20未満) | |
|
|
(C++20以上) | |
| (3) | ||
|
|
(C++20未満) | |
|
|
(C++20以上) | |
| (4) | ||
|
|
(C++20未満) | |
|
|
(C++20以上) | |
| (5) | ||
|
|
(C++20未満) | |
|
|
(C++20以上) | |
| (6) | ||
|
|
(C++20未満) | |
|
|
(C++20以上) | |
| (7) | ||
|
|
(C++20未満) | |
|
|
(C++20以上) | |
| (8) | ||
|
|
(C++20未満) | |
|
|
(C++20以上) | |
| (9) | ||
|
|
(C++20未満) | |
|
|
(C++20以上) | |
| (10) | ||
|
|
(C++20未満) | |
|
|
(C++20以上) | |
| (11) | ||
|
|
(C++20未満) | |
|
|
(C++20以上) | |
| (12) | ||
|
|
(C++20未満) | |
|
|
(C++20以上) | |
複素数算術および複素数とスカラーの混合算術のための二項演算子を実装します。 スカラーの引数は、その引数に等しい実部とゼロの虚部を持つ複素数として扱われます。
1-3) 引数の和を返します。
4-6) lhs から rhs を引いた結果を返します。
7-9) 引数を掛けます。
10-12) lhs を rhs で割ります。
引数
| 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)