home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
d
/
dec92.zip
/
1012084B
< prev
next >
Wrap
Text File
|
1992-10-13
|
2KB
|
47 lines
#include "xmath.h"
#include <float.h>
#define twopi 6.28318530717958647693
#define twobypi .63661977236758134308
double _Sin(x, qoff)
double x;
unsigned int qoff;
{ /* sin(x) or cos(x) */
double g, g2;
long quad;
int big;
if ((big = HUGE_RAD < x) || x < -HUGE_RAD) {
g = x * (1 / twopi);
x -= (big ?
(g + 1 / DBL_EPSILON) - 1 / DBL_EPSILON :
1 / DBL_EPSILON - (1 / DBL_EPSILON - g)) *
twopi;
/* Rounding mode doesn't matter */
}
g = quad = x * twobypi + (0 < x ? .5 : -.5);
#if LDBL_DIG > DBL_DIG && 0
g = x - g * 1.57079632679489661923L;
#else
g = (x - g * (3294198. / 2097152.)) - g *
3.139164786504813217e-7;
#endif
g2 = g * g;
if ((qoff += (unsigned long) quad & 3) & 1)
g = 1 + g2 * (-.499999999999999994 + g2 *
(.041666666666666452 + g2 *
(-.001388888888886110 + g2 *
(.000024801587283884 + g2 *
(-.000000275573130985 + g2 *
(.000000002087558246 - g2 *
.000000000011353383))))));
else
g += g * g2 * (-.16666666666666616 + g2 *
(.00833333333332036 + g2 * (-.00019841269828653
+ g2 * (.0000027557313377252
+ g2 * (-.000000025050717097 + g2 *
.00000000015894743)))));
return qoff & 2? -g: g;
}
WRAP_EOF