#include static const double INV_PI = 0.318309886183790671537768; static const double c0 = +1.0; static const double c1 = -1.6449340668482264364724e-0; // pi^2/3! static const double c2 = +8.1174242528335364363700e-1; // pi^4/5! static const double c3 = -1.9075182412208421369647e-1; // pi^6/7! static const double c4 = +2.6147847817654800504653e-2; // pi^8/9! static const double c5 = -2.3460810354558236375089e-3; // pi^10/11! /* * Let's compute x + c0.x^3 + c1.x^5 + c2.x^7 + c3.x^9 + c4.x^11 + c5.x^13 */ double sin1(double x) { double absx = fabs(x * INV_PI); double x2 = absx * absx; /* 5 multiplications */ double taylor = ((((c5 * x2 + c4) * x2 + c3) * x2 + c2) * x2 + c1) * x2 + c0; /* */ return x * taylor; } double sin2(double x) { double absx = fabs(x * INV_PI); double x2 = absx * absx; /* 6 multiplications */ double x4 = x2 * x2; double sub1 = (c4 * x4 + c2) * x4 + c0; double sub2 = (c5 * x4 + c3) * x4 + c1; double taylor = sub2 * x2 + sub1; /* */ return x * taylor; } double sin3(double x) { double absx = fabs(x * INV_PI); double x2 = absx * absx; /* 7 multiplications */ double x4 = x2 * x2; double x6 = x4 * x2; double sub1 = (c2 * x2 + c1) * x2 + c0; double sub2 = (c5 * x2 + c4) * x2 + c3; double taylor = sub2 * x6 + sub1; /* */ return x * taylor; }