.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
.\"     <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
.\" Distributed under GPL
.\" %%%LICENSE_END
.\"
.TH SINCOS 3  2017-09-15 "GNU" "Linux Programmer's Manual"
.SH NAME
sincos, sincosf, sincosl \- calculate sin and cos simultaneously
.SH SYNOPSIS
.nf
.BR "#define _GNU_SOURCE" "         /* See feature_test_macros(7) */"
.B #include <math.h>
.PP
.BI "void sincos(double " x ", double *" sin ", double *" cos );
.BI "void sincosf(float " x ", float *" sin ", float *" cos );
.BI "void sincosl(long double " x ", long double *" sin ", long double *" cos );
.fi
.PP
Link with \fI\-lm\fP.
.SH DESCRIPTION
Several applications need sine and cosine of the same angle
.IR x .
These functions compute both at the same time, and store the results in
.I *sin
and
.IR *cos .
Using this function can be more efficient than two separate calls to
.BR sin (3)
and
.BR cos (3).
.PP
If
.I x
is a NaN,
a NaN is returned in
.I *sin
and
.IR *cos .
.PP
If
.I x
is positive infinity or negative infinity,
a domain error occurs, and
a NaN is returned in
.I *sin
and
.IR *cos .
.SH RETURN VALUE
These functions return
.IR void .
.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 .
An invalid floating-point exception
.RB ( FE_INVALID )
is raised.
.PP
These functions do not set
.IR errno .
.\" FIXME . Is it intentional that these functions do not set errno?
.\" sin() and cos() also don't set errno; bugs have been raised for
.\" those functions.
.\" See https://www.sourceware.org/bugzilla/show_bug.cgi?id=15467
.SH VERSIONS
These functions first appeared in glibc in version 2.1.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.TS
allbox;
lbw30 lb lb
l l l.
Interface	Attribute	Value
T{
.BR sincos (),
.BR sincosf (),
.BR sincosl ()
T}	Thread safety	MT-Safe
.TE
.SH CONFORMING TO
These functions are GNU extensions.
.SH NOTES
To see the performance advantage of
.BR sincos (),
it may be necessary to disable
.BR gcc (1)
builtin optimizations, using flags such as:
.PP
.in +4n
.EX
cc -O \-lm \-fno\-builtin prog.c
.EE
.in
.SH SEE ALSO
.BR cos (3),
.BR sin (3),
.BR tan (3)
.SH COLOPHON
This page is part of release 4.15 of the Linux
.I man-pages
project.
A description of the project,
information about reporting bugs,
and the latest version of this page,
can be found at
\%https://www.kernel.org/doc/man\-pages/.
