diff --git a/include/boost/math/special_functions/cos_pi.hpp b/include/boost/math/special_functions/cos_pi.hpp index 4d90945622..6b29cb5cfc 100644 --- a/include/boost/math/special_functions/cos_pi.hpp +++ b/include/boost/math/special_functions/cos_pi.hpp @@ -11,6 +11,7 @@ #endif #include +#include #include #include #include @@ -33,8 +34,10 @@ T cos_pi_imp(T x, const Policy& pol) x = -x; } T rem = floor(x); - if(iconvert(rem, pol) & 1) + if(abs(floor(rem/2)*2 - rem) > std::numeric_limits::epsilon()) + { invert = !invert; + } rem = x - rem; if(rem > 0.5f) { diff --git a/include/boost/math/special_functions/sin_pi.hpp b/include/boost/math/special_functions/sin_pi.hpp index 3dc0966835..dd150c0284 100644 --- a/include/boost/math/special_functions/sin_pi.hpp +++ b/include/boost/math/special_functions/sin_pi.hpp @@ -11,6 +11,7 @@ #endif #include +#include #include #include #include @@ -38,8 +39,10 @@ inline T sin_pi_imp(T x, const Policy& pol) invert = false; T rem = floor(x); - if(iconvert(rem, pol) & 1) + if(abs(floor(rem/2)*2 - rem) > std::numeric_limits::epsilon()) + { invert = !invert; + } rem = x - rem; if(rem > 0.5f) rem = 1 - rem;