---
name: "atan2"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/atan2"
---

# atan2(3)

arc tangent and complex phase angle functions

## NAME

**atan2**, **atan2f**, **atan2l**, **carg**, **cargf**, **cargl** – arc tangent and complex phase angle functions

## 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*);

**#include \<complex.h\>**

*double*\

**carg**(*double complex z*);

*float*\

**cargf**(*float complex z*);

*long* *double*\

**cargl**(*long double complex z*);

## 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.

The **carg**(), **cargf**(), and **cargl**() functions compute the complex argument (or phase angle) of *z*. The complex argument is the number theta such that z = r \* e^(I \* theta), where r = cabs(z). The call carg(z) is equivalent to atan2(cimag(z), creal(z)), and similarly for **cargf**() and **cargl**().

## RETURN VALUES

The **atan2**(), **atan2f**(), and **atan2l**() functions, if successful, return the arc tangent of *y/**x* in the range\[-, +\] radians. Here are some of the special cases:

| | |
| --- | --- |
| **atan2**(*y*, *x*, *No*, *:=*) |  |
|  | sign(*y*)\*( - |
|  |  |
|  |  |

## NOTES

The function **atan2**() defines "if x \> 0," **atan2**(*0*, *0*) = 0 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 coordinates that must satisfy x = and y = These equations are satisfied when (x=0,y=0) is mapped to (r=0,theta=0). 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)](/hypot/3.md) and **atan2**() provided for such a machine are designed to handle all cases. That is why **atan2**(*±0*, *-0*) = ± 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)](/acos/3.md), [asin(3)](/asin/3.md), [atan(3)](/atan/3.md), [cabs(3)](/cabs/3.md), [cos(3)](/cos/3.md), [cosh(3)](/cosh/3.md), [math(3)](/math/3.md), [sin(3)](/sin/3.md), [sinh(3)](/sinh/3.md), [tan(3)](/tan/3.md), [tanh(3)](/tanh/3.md)

## STANDARDS

The **atan2**(), **atan2f**(), **atan2l**(), **carg**(), **cargf**(), and **cargl**() functions conform to ISO/IEC 9899:1999 (“ISO C99”).
