.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Ip \" List item
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R

.fi
..
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.if \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
..
.    nr % 0
.    rr F
.\}
.hy 0
.if n .na
.bd B 3
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.IX Title "sincos Cg"
.TH sincos Cg "" "Cg Toolkit 2.2" "Cg Standard Library"
.UC
.SH "NAME"
\&\fBsincos\fR \- returns sine of scalars and vectors.
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 5
\&  void sincos(float a, out float s, out float c);
\&  void sincos(float1 a, out float1 s, out float1 c);
\&  void sincos(float2 a, out float2 s, out float2 c);
\&  void sincos(float3 a, out float3 s, out float3 c);
\&  void sincos(float4 a, out float4 s, out float4 c);
.Ve
.Vb 5
\&  void sincos(half a, out half s, out half c);
\&  void sincos(half1 a, out half1 s, out half1 c);
\&  void sincos(half2 a, out half2 s, out half2 c);
\&  void sincos(half3 a, out half3 s, out half3 c);
\&  void sincos(half4 a, out half4 s, out half4 c);
.Ve
.Vb 5
\&  void sincos(fixed a, out fixed s, out fixed c);
\&  void sincos(fixed1 a, out fixed1 s, out fixed1 c);
\&  void sincos(fixed2 a, out fixed2 s, out fixed2 c);
\&  void sincos(fixed3 a, out fixed3 s, out fixed3 c);
\&  void sincos(fixed4 a, out fixed4 s, out fixed4 c);
.Ve
.SH "PARAMETERS"
.IX Header "PARAMETERS"
.Ip "a" 8
.IX Item "a"
Input vector or scalar of which to determine the sine and cosine.
.Ip "s" 8
.IX Item "s"
Ouput vector or scalar for sine results.
.Ip "c" 8
.IX Item "c"
Ouput vector or scalar for cosine results.
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
Outputs to \fIs\fR the sine of \fIa\fR in radians, and outputs to \fIc\fR the
cosine of \fIa\fR in radians.  The output values are in the range [\-1,+1].
.PP
For vectors, the output vectors contains the sine or cosine respectively
of each element of the input vector.
.SH "REFERENCE IMPLEMENTATION"
.IX Header "REFERENCE IMPLEMENTATION"
\&\fBsin\fR is best implemented as a native sine instruction, however \fBsin\fR
for a \fBfloat\fR scalar could be implemented by an approximation like this.
.PP
.Vb 3
\&  void sincos(float3 a, out float3 s, float3 out c)
\&  {
\&    int i;
.Ve
.Vb 5
\&    for (i=0; i<3; i++) {
\&      s[i] = sin(a[i]);
\&      c[i] = cos(a[i]);
\&    }
\&  }
.Ve
.SH "PROFILE SUPPORT"
.IX Header "PROFILE SUPPORT"
\&\fBsincos\fR is fully supported in all profiles unless otherwise specified.
.PP
\&\fBsincos\fR is supported via an approximation (shown above) in the
vs_1, vp20, and arbvp1 profiles.
.PP
\&\fBsincos\fR is unsupported in the fp20, ps_1_1, ps_1_2, and ps_1_3 profiles.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
cos, sin
