std:: polar (std::complex)
From ja.cppreference.net
|
ヘッダーで定義
<complex>
|
||
|
template
<
class
T
>
std:: complex < T > polar ( const T & r, const T & theta = T ( ) ) ; |
||
大きさ r と位相角 theta を持つ複素数を返します。
r が負の値またはNaNの場合、または theta が無限大の場合、動作は未定義です。
目次 |
パラメータ
| r | - | 大きさ |
| theta | - | 位相角 |
戻り値
r と theta によって決定される複素数。
注記
std :: polar ( r, theta ) は以下のいずれかの式と等価です:
- r * std:: exp ( theta * 1i )
- r * ( cos ( theta ) + sin ( theta ) * 1i )
- std:: complex ( r * cos ( theta ) , r * sin ( theta ) ) .
タグ内のテキスト、C++固有の用語は翻訳せず、元のフォーマットを保持しています。上記のコード部分はすべて翻訳対象外のため、日本語訳は不要です。)
極座標形式をexpの代わりに使用すると、ベクトル化されたループで 約4.5倍 高速化される可能性があります。
例
このコードを実行
#include <cmath> #include <complex> #include <iomanip> #include <iostream> #include <numbers> using namespace std::complex_literals; int main() { constexpr auto π_2{std::numbers::pi / 2.0}; constexpr auto mag{1.0}; std::cout << std::fixed << std::showpos << std::setprecision(1) << " θ: │ polar: │ exp: │ complex: │ trig:\n"; for (int n{}; n != 4; ++n) { const auto θ{n * π_2}; std::cout << std::setw(4) << 90 * n << "° │ " << std::polar(mag, θ) << " │ " << mag * std::exp(θ * 1.0i) << " │ " << std::complex(mag * cos(θ), mag * sin(θ)) << " │ " << mag * (cos(θ) + 1.0i * sin(θ)) << '\n'; } }
出力:
θ: │ polar: │ exp: │ complex: │ trig: +0° │ (+1.0,+0.0) │ (+1.0,+0.0) │ (+1.0,+0.0) │ (+1.0,+0.0) +90° │ (+0.0,+1.0) │ (+0.0,+1.0) │ (+0.0,+1.0) │ (+0.0,+1.0) +180° │ (-1.0,+0.0) │ (-1.0,+0.0) │ (-1.0,+0.0) │ (-1.0,+0.0) +270° │ (-0.0,-1.0) │ (-0.0,-1.0) │ (-0.0,-1.0) │ (-0.0,-1.0)
不具合報告
以下の動作変更欠陥報告書は、以前に公開されたC++標準に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2459 | C++98 | 一部の入力に対する動作が不明確 | 未定義動作に変更 |
| LWG 2870 | C++98 | パラメータ theta のデフォルト値が非依存 | 依存に変更 |
関連項目
|
複素数の絶対値を返す
(関数テンプレート) |
|
|
位相角を返す
(関数テンプレート) |
|
|
複素数の底
e
の指数関数
(関数テンプレート) |