Permalink
Branch: master
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
25 lines (23 sloc) 853 Bytes
// integral of sin(x)/x Taylor series approximated to w/i 0.1%
double sas_Si(double x);
double sas_Si(double x)
{
if (x >= M_PI*6.2/4.0) {
const double xxinv = 1./(x*x);
// Explicitly writing factorial values triples the speed of the calculation
const double out_cos = (((-720.*xxinv + 24.)*xxinv - 2.)*xxinv + 1.)/x;
const double out_sin = (((-5040.*xxinv + 120.)*xxinv - 6.)*xxinv + 1)*xxinv;
double sin_x, cos_x;
SINCOS(x, sin_x, cos_x);
return M_PI_2 - cos_x*out_cos - sin_x*out_sin;
} else {
const double xx = x*x;
// Explicitly writing factorial values triples the speed of the calculation
return (((((-1./439084800.*xx
+ 1./3265920.)*xx
- 1./35280.)*xx
+ 1./600.)*xx
- 1./18.)*xx
+ 1.)*x;
}
}