Common mathematical functions | |||||||||||||||||||||||||||||||
Mathematical special functions(C++17) | |||||||||||||||||||||||||||||||
Mathematical constants(C++20) | |||||||||||||||||||||||||||||||
Basic linear algebra algorithms(C++26) | |||||||||||||||||||||||||||||||
Data-parallel types (SIMD)(C++26) | |||||||||||||||||||||||||||||||
Floating-point environment(C++11) | |||||||||||||||||||||||||||||||
Complex numbers | |||||||||||||||||||||||||||||||
Numeric array (valarray ) | |||||||||||||||||||||||||||||||
Pseudo-random number generation | |||||||||||||||||||||||||||||||
Bit manipulation(C++20) | |||||||||||||||||||||||||||||||
Saturation arithmetic(C++26) | |||||||||||||||||||||||||||||||
Factor operations | |||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||
Interpolations | |||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||
Generic numeric operations | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
C-style checked integer arithmetic | |||||||||||||||||||||||||||||||
|
Defined in header <valarray> | ||
template<class T> std::valarray<T> atan2(conststd::valarray<T>& y,conststd::valarray<T>& x); | (1) | |
template<class T> std::valarray<T> atan2(conststd::valarray<T>& y, | (2) | |
template<class T> std::valarray<T> atan2(consttypenamestd::valarray<T>::value_type& vy, | (3) | |
Computes the inverse tangent ofy/ x using the signs of arguments to correctly determine quadrant.
The behavior is undefined ifx.size()!= y.size().
Contents |
x, y | - | numeric arrays to compute inverse tangent of |
vy, vx | - | values to compute inverse tangent of |
A numeric array containing the results of computation of inverse tangent.
Unqualified function (atan2) is used to perform the computation. If such function is not available,std::atan2 is used due toargument-dependent lookup.
The function can be implemented with the return type different fromstd::valarray. In this case, the replacement type has the following properties:
#include <algorithm>#include <cmath>#include <iomanip>#include <iostream>#include <valarray> void show(charconst* title,conststd::valarray<double>& va){std::cout<< title<<' ';std::for_each(std::begin(va),std::end(va),[](constdouble x){std::cout<<' '<<std::right<<std::setw(4)<< x<<"°";});std::cout<<'\n';} constdouble pi=std::acos(-1.0);// C++20: std::numbers::pi int main(){auto degrees_to_radians=[](doubleconst& x){return(pi* x/180);};auto radians_to_degrees=[](doubleconst& x){return(180* x/ pi);}; conststd::valarray<double> degrees{-90,-60,-45,-30,0,30,45,60,90};conststd::valarray<double> radians= degrees.apply(degrees_to_radians); constauto sin=std::sin(radians);constauto 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));}
Output:
(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°
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 3074 | C++98 | T is deduced from both the scalar and thevalarray for(2,3), disallowing mixed-type calls | only deduceT from thevalarray |
applies the functionstd::asin to each element of valarray (function template)[edit] | |
applies the functionstd::acos to each element of valarray (function template)[edit] | |
applies the functionstd::atan to each element of valarray (function template)[edit] | |
(C++11)(C++11) | arc tangent, using signs to determine quadrants (function)[edit] |
returns the phase angle (function template)[edit] |