root / proj / src / fast_math.c @ 196
History | View | Annotate | Download (842 Bytes)
1 |
#include <lcom/lcf.h> |
---|---|
2 |
|
3 |
#include "fast_math.h" |
4 |
|
5 |
#include <math.h> |
6 |
|
7 |
double fm_sin(double x){ |
8 |
if(x < 0.0) return -fm_sin(-x); |
9 |
if(x > 2.0*M_PI) return fm_sin(x-2.0*M_PI); |
10 |
if(x > M_PI) return -fm_sin(x-M_PI); |
11 |
if(x > 0.5*M_PI) x = M_PI - x; |
12 |
double x2 = x*x;
|
13 |
double x3 = x*x2;
|
14 |
double x5 = x3*x2;
|
15 |
//double x7 = x5*x2;
|
16 |
return x-x3*0.1666666666666666666666+x5*0.008333333333333333333333;//-x7*0.0001984126984127; |
17 |
} |
18 |
|
19 |
double fm_cos(double x){ |
20 |
if(x < 0.0) x = -x; |
21 |
if(x > 2.0*M_PI) return fm_cos(x-2.0*M_PI); |
22 |
if(x > M_PI) x = 2.0*M_PI-x; |
23 |
if(x > 0.5*M_PI) return -fm_cos(M_PI-x); |
24 |
double x2 = x*x;
|
25 |
double x4 = x2*x2;
|
26 |
double x6 = x4*x2;
|
27 |
//double x8 = x4*x4;
|
28 |
return 1.0-x2*0.5+x4*0.041666666666666666666666-x6*0.0013888888888888888888888;//+x8*0.000024801587; |
29 |
} |