- complex[meta header]
- std[meta namespace]
- function template[meta id-type]
namespace std {
template <class T>
complex<T>
polar(const T& rho,
const T& theta = 0); // (1) C++03
template <class T>
constexpr complex<T>
polar(const T& rho,
const T& theta = 0); // (1) C++26
}複素数を極形式で指定して作る。polar は polar form(極形式)の略。
絶対値が rho で偏角が theta の複素数
- 規格には、偏角
thetaの単位については何も記載がない。しかし、この引数の単位がラジアンであることは異論をはさむ余地はないだろう。
実際、本関数の逆関数(の片割れ)とも言えるargの戻り値はラジアンである。 - コンストラクタのデフォルト引数を踏まえると、偏角
thetaのデフォルト引数がT()ではなく0であるのは、規格の誤りであるように思われる。 rhoとthetaに現れる型Tは(残念ながら)同じ型でなければならない。(intとdoubleを渡すなどといったことはできない)
同じ<complex>ヘッダのpowや、cmathヘッダのatan2などの関数群は、引数の型が異なっていても簡単に呼び出せるように C++11 でオーバーロードが追加されているため、単なる規格の考慮漏れかもしれない。
#include <iostream>
#include <complex>
#include <cmath>
static const double pi = std::acos(-1.0); // お手軽に π を得る。
int main()
{
std::complex<double> result = std::polar(1.0, pi / 4.0);
std::cout << "polar(1.0, pi / 4.0) = " << result << std::endl;
}- std::polar[color ff0000]
- std::acos[link /reference/cmath/acos.md]
polar(1.0, pi / 4.0) = (0.707107,0.707107)
- C++98
- Clang: 3.0 [mark verified], 3.1 [mark verified], 3.2 [mark verified], 3.3 [mark verified], 3.4 [mark verified]
- GCC: 4.3.6 [mark verified], 4.4.7 [mark verified], 4.5.4 [mark verified], 4.6.4 [mark verified], 4.7.3 [mark verified], 4.8.1 [mark verified], 4.8.2 [mark verified], 4.9.0 [mark verified]
- ICC: ??
- Visual C++: ??
| 名前 | 説明 |
|---|---|
real |
複素数の実部を得る。 |
imag |
複素数の虚部を得る。 |
abs |
複素数の絶対値を得る。 |
arg |
複素数の偏角を得る。 |
norm |
複素数体のノルムを得る。 |
conj |
共役複素数を得る。 |
proj |
リーマン球面への射影を得る。 |
- P1383R2 More constexpr for
<cmath>and<complex>- C++26で
constexpr対応した
- C++26で