Spec-Zone.ru › C++

std::polar(std::complex)

Определено в заголовке <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)).

Использование 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++.

DR Применен к Поведение при публикации Правильное поведение
LWG 2459 C++98 поведение неопределено для некоторых входных данных сделано неопределенным
LWG 2870 C++98 значение по умолчанию параметра theta не зависит сделано зависимым

См. также

abs(std::complex)
возвращает модуль комплексного числа
(функция-шаблон)
arg
возвращает фазовый угол
(функция-шаблон)
exp(std::complex)
комплексная экспонента по основанию e
(функция-шаблон)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/complex/polar

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API