ATAN2(3) | Library Functions Manual | ATAN2(3)

# NAME

`atan2`, `atan2f`, `atan2l` —
arc tangent function of two variables

# LIBRARY

Math Library (libm, -lm)

# SYNOPSIS

`#include <math.h>`

double
`atan2`(double y, double x);

float
`atan2f`(float y, float x);

long double
`atan2l`(long double y, long double x);

# DESCRIPTION

The `atan2`(), `atan2f`(), and `atan2l`() functions compute the principal value of the arc tangent of y/x, using the signs of both arguments to determine the quadrant of the return value.

# RETURN VALUES

The `atan2`() function, if successful, returns the arc tangent of y/x in the range [-pi, +pi] radians. If both x and y are zero, the global variable errno is set to `EDOM`. On the VAX:

`atan2`(y, x) := | `atan`(y/x) | if x > 0,
| sign(y)*(pi - `atan`(|y/x|)) | if x < 0,
| 0 | if x = y = 0, or
| sign(y)*pi/2 | if x = 0 y.

# NOTES

The function `atan2`() defines "if x > 0," `atan2`(0, 0) = 0 on a VAX despite that previously `atan2`(0, 0) may have generated an error message. The reasons for assigning a value to `atan2`(0, 0) are these:

1. Programs that test arguments to avoid computing `atan2`(0, 0) must be indifferent to its value. Programs that require it to be invalid are vulnerable to diverse reactions to that invalidity on diverse computer systems.
2. The `atan2`() function is used mostly to convert from rectangular (x,y) to polar (r,theta) coordinates that must satisfy x = r∗cos theta and y = r∗sin theta. These equations are satisfied when (x=0,y=0) is mapped to (r=0,theta=0) on a VAX. In general, conversions to polar coordinates should be computed thus:

       r	:= hypot(x,y);  ... := sqrt(x∗x+y∗y)
       theta	:= atan2(y,x).

3. The foregoing formulas need not be altered to cope in a reasonable way with signed zeros and infinities on a machine that conforms to IEEE 754; the versions of hypot(3) and `atan2`() provided for such a machine are designed to handle all cases. That is why `atan2`(±0, -0) = ±pi for instance. In general the formulas above are equivalent to these:

       r := sqrt(x∗x+y∗y); if r = 0 then x := copysign(1,x);

# SEE ALSO

acos(3), asin(3), atan(3), cos(3), cosh(3), math(3), sin(3), sinh(3), tan(3), tanh(3)

# STANDARDS

The `atan2`() function conforms to ISO/IEC 9899:1999 (“ISO C99”).

January 29, 2013 | NetBSD 9.2