// Copyright (C) 2005 Peder Holt // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_METAMATH_DOUBLE_SINE_HPP #define BOOST_METAMATH_DOUBLE_SINE_HPP #include #include #include #include #include #include #include #include #include #include namespace boost { namespace metamath { namespace detail { /* * Compile-time Taylor series. */ template < typename Angle , typename I , typename SeriesCount > struct sine_series { private: typedef typename mpl::eval_if< mpl::equal_to,I>,SeriesCount> , meta::one , sine_series,I>,SeriesCount> >::type next_term; public: typedef minus_double_double< meta::one, times_double_double< divides_double_double< divides_double_double< times_double_double , plus_double_double >,meta::two > > , plus_double_double >,meta::three > > , next_term > > type; }; } // namespace aux template struct sine_impl; template <> struct sine_impl { template struct apply : detail::round,mpl::int_<13> >::type > >::type { }; }; template <> struct sine_impl { template struct apply : detail::round,mpl::int_<0>,mpl::int_<13> >::type > >::type { }; }; }} //namespace boost::metamath #endif