SDL
2.0
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
s_sin.c
Go to the documentation of this file.
1
/*
2
* ====================================================
3
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
4
*
5
* Developed at SunPro, a Sun Microsystems, Inc. business.
6
* Permission to use, copy, modify, and distribute this
7
* software is freely granted, provided that this notice
8
* is preserved.
9
* ====================================================
10
*/
11
12
/* sin(x)
13
* Return sine function of x.
14
*
15
* kernel function:
16
* __kernel_sin ... sine function on [-pi/4,pi/4]
17
* __kernel_cos ... cose function on [-pi/4,pi/4]
18
* __ieee754_rem_pio2 ... argument reduction routine
19
*
20
* Method.
21
* Let S,C and T denote the sin, cos and tan respectively on
22
* [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2
23
* in [-pi/4 , +pi/4], and let n = k mod 4.
24
* We have
25
*
26
* n sin(x) cos(x) tan(x)
27
* ----------------------------------------------------------
28
* 0 S C T
29
* 1 C -S -1/T
30
* 2 -S -C T
31
* 3 -C S -1/T
32
* ----------------------------------------------------------
33
*
34
* Special cases:
35
* Let trig be any of sin, cos, or tan.
36
* trig(+-INF) is NaN, with signals;
37
* trig(NaN) is that NaN;
38
*
39
* Accuracy:
40
* TRIG(x) returns trig(x) nearly rounded
41
*/
42
43
#include "
math_libm.h
"
44
#include "
math_private.h
"
45
46
double
sin
(
double
x
)
47
{
48
double
y
[2],
z
=0.0;
49
int32_t
n
, ix;
50
51
/* High word of x. */
52
GET_HIGH_WORD
(ix,x);
53
54
/* |x| ~< pi/4 */
55
ix &= 0x7fffffff;
56
if
(ix <= 0x3fe921fb)
return
__kernel_sin
(x,z,0);
57
58
/* sin(Inf or NaN) is NaN */
59
else
if
(ix>=0x7ff00000)
return
x-
x
;
60
61
/* argument reduction needed */
62
else
{
63
n =
__ieee754_rem_pio2
(x,y);
64
switch
(n&3) {
65
case
0:
return
__kernel_sin
(y[0],y[1],1);
66
case
1:
return
__kernel_cos
(y[0],y[1]);
67
case
2:
return
-
__kernel_sin
(y[0],y[1],1);
68
default
:
69
return
-
__kernel_cos
(y[0],y[1]);
70
}
71
}
72
}
73
libm_hidden_def
(
sin
)
src
libm
s_sin.c
Generated on Sun Jun 26 2022 23:07:12 for SDL by
1.8.1.2