Defined in header <cmath>  

(1)  
float atan2 ( float y, float x );  
float atan2f( float y, float x );  (since C++11)  
double atan2 ( double y, double x );  (2)  
(3)  
long double atan2 ( long double y, long double x );  
long double atan2l( long double y, long double x );  (since C++11)  
Promoted atan2 ( Arithmetic1 y, Arithmetic2 x );  (4)  (since C++11) 
y/x
using the signs of arguments to determine the correct quadrant.double
. If any argument is long double
, then the return type Promoted
is also long double
, otherwise the return type is always double
.y, x    values of floatingpoint or integral types 
y/x
(arctan(y/x)) in the range [π , +π] radians, is returned. If a domain error occurs, an implementationdefined value is returned (NaN where supported).
If a range error occurs due to underflow, the correct result (after rounding) is returned.
Errors are reported as specified in math_errhandling
.
Domain error may occur if x
and y
are both zero.
If the implementation supports IEEE floatingpoint arithmetic (IEC 60559),
x
and y
are both zero, domain error does not occur x
and y
are both zero, range error does not occur either y
is zero, pole error does not occur y
is ±0
and x
is negative or 0
, ±π
is returned y
is ±0
and x
is positive or +0
, ±0
is returned y
is ±∞
and x
is finite, ±π/2
is returned y
is ±∞
and x
is ∞
, ±3π/4
is returned y
is ±∞
and x
is +∞
, ±π/4
is returned x
is ±0
and y
is negative, π/2
is returned x
is ±0
and y
is positive, +π/2
is returned x
is ∞
and y
is finite and positive, +π
is returned x
is ∞
and y
is finite and negative, π
is returned x
is +∞
and y
is finite and positive, +0
is returned x
is +∞
and y
is finite and negative, 0
is returned x
is NaN or y
is NaN, NaN is returned std::atan2(y, x)
is equivalent to std::arg(std::complex<double>(x,y))
.
POSIX specifies that in case of underflow, y/x
is the value returned, and if that is not supported, an implementationdefined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.
#include <iostream> #include <cmath> int main() { // normal usage: the signs of the two arguments determine the quadrant std::cout << "(x:+1,y:+1) cartesian is (r:" << hypot(1,1) << ",phi:" << atan2(1,1) << ") polar\n" // atan2(1,1) = +pi/4, Quad I << "(x:1,y:+1) cartesian is (r:" << hypot(1,1) << ",phi:" << atan2(1,1) << ") polar\n" // atan2(1, 1) = +3pi/4, Quad II << "(x:1,y:1) cartesian is (r:" << hypot(1,1) << ",phi:" << atan2(1,1) << ") polar\n" // atan2(1,1) = 3pi/4, Quad III << "(x:+1,y:1) cartesian is (r:" << hypot(1,1) << ",phi:" << atan2(1,1) << ") polar\n"; // atan2(1, 1) = pi/4, Quad IV // special values std::cout << "atan2(0, 0) = " << atan2(0,0) << " atan2(0,0) = " << atan2(0,0.0) << '\n' << "atan2(7, 0) = " << atan2(7,0) << " atan2(7,0) = " << atan2(7,0.0) << '\n'; }
Output:
(x:+1,y:+1) cartesian is (r:1.41421,phi:0.785398) polar (x:1,y:+1) cartesian is (r:1.41421,phi:2.35619) polar (x:1,y:1) cartesian is (r:1.41421,phi:2.35619) polar (x:+1,y:1) cartesian is (r:1.41421,phi:0.785398) polar atan2(0, 0) = 0 atan2(0,0) = 3.14159 atan2(7, 0) = 1.5708 atan2(7,0) = 1.5708
(C++11)(C++11)  computes arc sine (\({\small\arcsin{x} }\)arcsin(x)) (function) 
(C++11)(C++11)  computes arc cosine (\({\small\arccos{x} }\)arccos(x)) (function) 
(C++11)(C++11)  computes arc tangent (\({\small\arctan{x} }\)arctan(x)) (function) 
returns the phase angle (function template) 

applies the function std::atan2 to a valarray and a value (function template) 

C documentation for atan2 
© cppreference.com
Licensed under the Creative Commons AttributionShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/math/atan2