| Defined in header <math.h> | ||
|---|---|---|
float atan2f( float y, float x ); | (1) | (since C99) |
double atan2( double y, double x ); | (2) | |
long double atan2l( long double y, long double x ); | (3) | (since C99) |
| Defined in header <tgmath.h> | ||
#define atan2( arg ) | (4) | (since C99) |
y/x using the signs of arguments to determine the correct quadrant.long double, atan2l is called. Otherwise, if the argument has integer type or the type double, atan2 is called. Otherwise, atan2f is called.Parameters
| x, y | - | floating point value |
Return value
If no errors occur, the arc tangent of y/x (arctan(
| y |
| x |
)) in the range [-π ; +π] radians, is returned.
If a domain error occurs, an implementation-defined value is returned.
If a range error occurs due to underflow, the correct result (after rounding) is returned.
Error handling
Errors are reported as specified in math_errhandling.
Domain error may occur if x and y are both zero.
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
- If
xandyare both zero, domain error does not occur - If
xandyare both zero, range error does not occur either - If
yis zero, pole error does not occur - If
yis±0andxis negative or-0,±πis returned - If
yis±0andxis negative or+0,±0is returned - If
yis±∞andxis finite,±π/2is returned - If
yis±∞andxis-∞,±3π/4is returned - If
yis±∞andxis+∞,±π/4is returned - If
xis±0andyis negative,-π/2is returned - If
xis±0andyis positive,+π/2is returned - If
xis-∞andyis finite and positive,+πis returned - If
xis-∞andyis finite and negative,-πis returned - If
xis+∞andyis finite and positive,+0is returned - If
xis+∞andyis finite and negative,-0is returned - If either
xis NaN oryis NaN, NaN is returned
Notes
atan2(y, x) is equivalent to carg(x + I*y).
POSIX specifies that in case of underflow, y/x is the value returned, and if that is not supported, an implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.
Example
#include <stdio.h>
#include <math.h>
int main(void)
{
// normal usage: the signs of the two arguments determine the quadrant
// atan2(1,1) = +pi/4, Quad I
printf("(+1,+1) cartesian is (%f,%f) polar\n", hypot( 1, 1), atan2( 1, 1));
// atan2(1, -1) = +3pi/4, Quad II
printf("(+1,-1) cartesian is (%f,%f) polar\n", hypot( 1,-1), atan2( 1,-1));
// atan2(-1,-1) = -3pi/4, Quad III
printf("(-1,-1) cartesian is (%f,%f) polar\n", hypot(-1,-1), atan2(-1,-1));
// atan2(-1,-1) = -pi/4, Quad IV
printf("(-1,+1) cartesian is (%f,%f) polar\n", hypot(-1, 1), atan2(-1, 1));
// special values
printf("atan2(0, 0) = %f atan2(0, -0)=%f\n", atan2(0,0), atan2(0,-0.0));
printf("atan2(7, 0) = %f atan2(7, -0)=%f\n", atan2(7,0), atan2(7,-0.0));
}Output:
(+1,+1) cartesian is (1.414214,0.785398) polar (+1,-1) cartesian is (1.414214,2.356194) polar (-1,-1) cartesian is (1.414214,-2.356194) polar (-1,+1) cartesian is (1.414214,-0.785398) polar atan2(0, 0) = 0.000000 atan2(0, -0)=3.141593 atan2(7, 0) = 1.570796 atan2(7, -0)=1.570796
References
- C11 standard (ISO/IEC 9899:2011):
- 7.12.4.4 The atan2 functions (p: 239)
- 7.25 Type-generic math <tgmath.h> (p: 373-375)
- F.10.1.4 The atan2 functions (p: 519)
- C99 standard (ISO/IEC 9899:1999):
- 7.12.4.4 The atan2 functions (p: 219)
- 7.22 Type-generic math <tgmath.h> (p: 335-337)
- F.9.1.4 The atan2 functions (p: 456)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.5.2.4 The atan2 function
See also
| (C99)(C99) | computes arc sine (arcsin(x)) (function) |
| (C99)(C99) | computes arc cosine (arccos(x)) (function) |
| (C99)(C99) | computes arc tangent (arctan(x)) (function) |
| (C99)(C99)(C99) | computes the phase angle of a complex number (function) |
C++ documentation for atan2 | |
Please login to continue.