.\" 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 COS 3 2021-03-22 ""   "Linux Programmer's Manual"
.SH NAME
cos, cosf, cosl \- cosine function
.SH SYNOPSIS
.nf
.B #include <math.h>
.PP
.BI "double cos(double " x );
.BI "float cosf(float " x );
.BI "long double cosl(long double " x );
.fi
.PP
Link with \fI\-lm\fP.
.PP
.RS -4
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.RE
.PP
.BR cosf (),
.BR cosl ():
.nf
    _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
        || /* Since glibc 2.19: */ _DEFAULT_SOURCE
        || /* Glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
.fi
.SH DESCRIPTION
These functions return the cosine of
.IR x ,
where
.I x
is
given in radians.
.SH RETURN VALUE
On success, these functions return the cosine of
.IR x .
.PP
If
.I x
is a NaN, a NaN is returned.
.PP
If
.I x
is positive infinity or negative infinity,
a domain error occurs,
and a NaN is returned.
.SH ERRORS
See
.BR math_error (7)
for information on how to determine whether an error has occurred
when calling these functions.
.PP
The following errors can occur:
.TP
Domain error: \fIx\fP is an infinity
.I errno
is set to
.BR EDOM
(but see BUGS).
An invalid floating-point exception
.RB ( FE_INVALID )
is raised.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.BR cos (),
.BR cosf (),
.BR cosl ()
T}	Thread safety	MT-Safe
.TE
.hy
.ad
.sp 1
.SH CONFORMING TO
C99, POSIX.1-2001, POSIX.1-2008.
.PP
The variant returning
.I double
also conforms to
SVr4, 4.3BSD.
.SH BUGS
Before version 2.10, the glibc implementation did not set
.\" http://sources.redhat.com/bugzilla/show_bug.cgi?id=6780
.I errno
to
.B EDOM
when a domain error occurred.
.SH SEE ALSO
.BR acos (3),
.BR asin (3),
.BR atan (3),
.BR atan2 (3),
.BR ccos (3),
.BR sin (3),
.BR sincos (3),
.BR tan (3)
