std::atan2(std::valarray)
cppreference.net에서
| 헤더 <valarray>
|
||
template< class T >
std::valarray<T> atan2( const std::valarray<T>& y, const std::valarray<T>& x );
|
에 정의됨 (1) | |
template< class T >
std::valarray<T> atan2( const std::valarray<T>& y,
const typename std::valarray<T>::value_type& vx );
|
(2) | |
template< class T >
std::valarray<T> atan2( const typename std::valarray<T>::value_type& vy,
const std::valarray<T>& x );
|
(3) | |
인수의 부호를 사용하여 사분면을 올바르게 결정하면서 y / x의 아크탄젠트를 계산합니다.
1)
y와 x에서 대응하는 각 값 쌍에 대한 아크탄젠트를 계산합니다.만약 x.size() != y.size()인 경우 동작은 정의되지 않습니다.
2)
vx와 숫자 배열 y의 각 값에 대한 아크탄젠트를 계산합니다.3)
vy와 숫자 배열 x의 각 값에 대한 아크탄젠트를 계산합니다.매개변수
| x, y | - | 역탄젠트를 계산할 숫자 배열 |
| vy, vx | - | 역탄젠트를 계산할 값 |
반환값
역탄젠트 계산 결과를 포함하는 숫자 배열.
참고 사항
계산을 수행하기 위해 정규화되지 않은 함수 (atan2)가 사용됩니다. 그러한 함수를 사용할 수 없는 경우, std::atan2가 인수 종속 조회로 인해 사용됩니다.
함수는 std::valarray와 다른 반환 형식으로 구현될 수 있습니다. 이 경우 대체 형식은 다음 속성을 갖습니다:
- 모든
const멤버 함수는 std::valarray에서 제공됩니다. - std::valarray, std::slice_array, std::gslice_array, std::mask_array 및 std::indirect_array는 대체 형식으로부터 생성될 수 있습니다.
- 모든 함수가 하나의
const std::valarray<T>&를 인자로 취할 때 (단, begin() 및 end()(C++11부터)는 제외), 대체 형식을 취하는 동일한 함수가 추가되어야 합니다. - 모든 함수가 두 개의
const std::valarray<T>&인자를 취할 때,const std::valarray<T>&와 대체 형식의 모든 조합을 취하는 동일한 함수가 추가되어야 합니다. - 반환 형식은 가장 깊게 중첩된 인자 형식보다 템플릿 중첩 수준을 두 단계 이상 추가하지 않습니다.
예제
이 코드 실행
#include <algorithm> #include <cmath> #include <iomanip> #include <iostream> #include <valarray> void show(char const* title, const std::valarray<double>& va) { std::cout << title << ' '; std::for_each(std::begin(va), std::end(va), [](const double x) { std::cout << ' ' << std::right << std::setw(4) << x << "°"; }); std::cout << '\n'; } const double pi = std::acos(-1.0); // C++20: std::numbers::pi int main() { auto degrees_to_radians = [](double const& x) { return (pi * x / 180); }; auto radians_to_degrees = [](double const& x) { return (180 * x / pi); }; const std::valarray<double> degrees{-90, -60, -45, -30, 0, 30, 45, 60, 90}; const std::valarray<double> radians = degrees.apply(degrees_to_radians); const auto sin = std::sin(radians); const auto cos = std::cos(radians); show("(1)", std::atan2(sin, cos).apply(radians_to_degrees)); show("(2)", std::atan2(sin/cos, 1.0).apply(radians_to_degrees)); show("(3)", std::atan2(1.0, cos/sin).apply(radians_to_degrees)); }
출력:
(1) -90° -60° -45° -30° 0° 30° 45° 60° 90° (2) -90° -60° -45° -30° 0° 30° 45° 60° 90° (3) 90° 120° 135° 150° 0° 30° 45° 60° 90°
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 3074 | C++98 |
T
가 스칼라와
valarray
모두에서 추론되어
(2,3)
혼합 타입 호출이 허용되지 않음
|
valarray
에서만
T
를 추론
|
참고 항목
|
valarray의 각 요소에
std::asin
함수를 적용합니다
(함수 템플릿) |
|
|
valarray의 각 요소에
std::acos
함수를 적용합니다
(함수 템플릿) |
|
|
valarray의 각 요소에
std::atan
함수를 적용합니다
(함수 템플릿) |
|
|
(C++11)
(C++11)
|
부호를 사용하여 사분면을 결정하는 아크 탄젠트
(함수) |
|
위상각을 반환합니다
(함수 템플릿) |