# DragonFly On-Line Manual Pages

```ATAN2(3)	      DragonFly Library Functions Manual	      ATAN2(3)

NAME
atan2, atan2f, atan2l -- arc tangent functions of two variables

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() function computes the principal value of the arc tangent of
y/x, using the signs of both arguments to determine the quadrant of the
return value.  The atan2f() function is a single precision version of
atan2().  The atan2l() function is an extended precision version of
atan2().

RETURN VALUES
The atan2(), atan2f() and atan2l() functions, if successful, return 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 != 0.

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 inva-
lidity on diverse computer systems.

2.	The atan2() function is used mostly to convert from rectangu-
lar (x,y) to polar (r,theta) coordinates that must satisfy x =
r*cos theta and y = r*sin theta.  These equations are satis-
fied 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 rea-
sonable 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);