diff --git a/src/trig.cpp b/src/trig.cpp index af23e23c..ac9ea31d 100644 --- a/src/trig.cpp +++ b/src/trig.cpp @@ -387,7 +387,8 @@ void lol_sincos(double x, double *sinx, double *cosx) #if defined LOL_FEATURE_VERY_CHEAP_BRANCHES if (lol_fabs(absx) > QUARTER) { - sign = (x * absx >= 0.0) ? sign : -sign; + cos_sign = sin_sign; + sin_sign = (x * absx >= 0.0) ? sin_sign : -sin_sign; double x1 = HALF - lol_fabs(absx); double x2 = x1 * x1; @@ -396,23 +397,25 @@ void lol_sincos(double x, double *sinx, double *cosx) double subs1 = ((CC[5] * x4 + CC[3]) * x4 + CC[1]) * x4 + ONE; double subs2 = (CC[4] * x4 + CC[2]) * x4 + CC[0]; double taylors = subs2 * x2 + subs1; - *sinx = taylors * sign; + *sinx = taylors * sin_sign; - double subc1 = (SC[3] * x4 + SC[1]) * x4 + ONE; + double subc1 = ((SC[5] * x4 + SC[3]) * x4 + SC[1]) * x4 + ONE; double subc2 = (SC[4] * x4 + SC[2]) * x4 + SC[0]; double taylorc = subc2 * x2 + subc1; - *cosx = x1 * taylorc * sign * PI; + *cosx = x1 * taylorc * cos_sign * PI; return; } #endif +#if !defined __CELLOS_LV2__ sin_sign *= (x >= 0.0) ? PI : NEG_PI; +#endif double x2 = absx * absx; double x4 = x2 * x2; #if defined LOL_FEATURE_VERY_CHEAP_BRANCHES - double subs1 = ((CC[5] * x4 + SC[3]) * x4 + SC[1]) * x4 + ONE; + double subs1 = ((SC[5] * x4 + SC[3]) * x4 + SC[1]) * x4 + ONE; double subs2 = (SC[4] * x4 + SC[2]) * x4 + SC[0]; double subc1 = ((CC[5] * x4 + CC[3]) * x4 + CC[1]) * x4 + ONE; double subc2 = (CC[4] * x4 + CC[2]) * x4 + CC[0];