.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
.\"     <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.\" References consulted:
.\"     Linux libc source code
.\"     Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
.\"     386BSD man pages
.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
.\" Modified 2002-07-27 by Walter Harms
.\" 	(walter.harms@informatik.uni-oldenburg.de)
.\"
.TH ATAN 3  2017-09-15 "" "Linux Programmer's Manual"
.SH NAME
atan, atanf, atanl \- arc tangent function
.SH SYNOPSIS
.nf
.B #include <math.h>
.PP
.BI "double atan(double " x );
.BI "float atanf(float " x );
.BI "long double atanl( long double " x );
.PP
.fi
Link with \fI\-lm\fP.
.PP
.in -4n
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.in
.PP
.ad l
.BR atanf (),
.BR atanl ():
.RS 4
_ISOC99_SOURCE || _POSIX_C_SOURCE\ >=\ 200112L
    || /* Since glibc 2.19: */ _DEFAULT_SOURCE
    || /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
.RE
.ad b
.SH DESCRIPTION
These functions calculate the principal value of the arc tangent of
.IR x ;
that is the value whose tangent is
.IR x .
.SH RETURN VALUE
On success, these functions return the principal value of the arc tangent of
.IR x
in radians; the return value is in the range [\-pi/2,\ pi/2].
.PP
If
.I x
is a NaN, a NaN is returned.
.PP
If
.I x
is +0 (\-0),
+0 (\-0) is returned.
.PP
If
.I x
is positive infinity (negative infinity), +pi/2 (\-pi/2) is returned.
.\"
.\" POSIX.1-2001 documents an optional range error for subnormal x;
.\" glibc 2.8 does not do this.
.SH ERRORS
No errors occur.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.TS
allbox;
lbw24 lb lb
l l l.
Interface	Attribute	Value
T{
.BR atan (),
.BR atanf (),
.BR atanl ()
T}	Thread safety	MT-Safe
.TE
.SH CONFORMING TO
C99, POSIX.1-2001, POSIX.1-2008.
.PP
The variant returning
.I double
also conforms to
SVr4, 4.3BSD, C89.
.SH SEE ALSO
.BR acos (3),
.BR asin (3),
.BR atan2 (3),
.BR carg (3),
.BR catan (3),
.BR cos (3),
.BR sin (3),
.BR tan (3)
