diff --git a/src/real.cpp b/src/real.cpp index 78ab1b3c..2101053e 100644 --- a/src/real.cpp +++ b/src/real.cpp @@ -738,33 +738,7 @@ real sin(real const &x) real cos(real const &x) { - bool switch_sign = false; - real absx = fmod(fabs(x), real::R_PI << 1); - - if (absx > real::R_PI) - absx = (real::R_PI << 1) - absx; - - if (absx > real::R_PI_2) - { - absx = real::R_PI - absx; - switch_sign = true; - } - - real ret = 0.0, fact = 1.0, xn = 1.0, x2 = absx * absx; - for (int i = 1; ; i += 2) - { - real newret = ret + xn / fact; - if (ret == newret) - break; - ret = newret; - xn *= x2; - fact *= (real)(-i * (i + 1)); - } - - /* Propagate sign */ - if (switch_sign) - ret.m_signexp ^= 0x80000000u; - return ret; + return sin(real::R_PI_2 - x); } static real asinacos(real const &x, bool is_asin, bool is_negative)