命名空间
变体
操作

std::polar(std::complex)

来自 cppreference.cn
< cpp‎ | 数值‎ | 复数
 
 
 
 
定义于头文件 <complex>
template< class T >
std::complex<T> polar( const T& r, const T& theta = T() );

返回一个具有模 r 和相角 theta 的复数。

如果 r 为负数或 NaN,或者 theta 为无穷大,则行为未定义。

目录

[编辑] 参数

r -
theta - 相角

[编辑] 返回值

rtheta 确定的复数。

[编辑] 注意

std::polar(r, theta) 等价于以下任何表达式

  • r * std::exp(theta * 1i)
  • r * (cos(theta) + sin(theta) * 1i)
  • std::complex(r * cos(theta), r * sin(theta)).

在向量化循环中,使用 polar 而不是 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++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
LWG 2459 C++98 某些输入的行为不明确 改为未定义
LWG 2870 C++98 参数 theta 的默认值不依赖于类型 改为依赖于类型

[编辑] 另请参阅

返回复数的模
(函数模板) [编辑]
返回相角
(函数模板) [编辑]
复数 e 的指数
(函数模板) [编辑]