1 // (C) Copyright John Maddock 2007. 2 // Use, modification and distribution are subject to the 3 // Boost Software License, Version 1.0. (See accompanying file 4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5 // 6 // This file is machine generated, do not edit by hand 7 8 // Polynomial evaluation using second order Horners rule 9 #ifndef BOOST_MATH_TOOLS_POLY_EVAL_10_HPP 10 #define BOOST_MATH_TOOLS_POLY_EVAL_10_HPP 11 12 namespace boost{ namespace math{ namespace tools{ namespace detail{ 13 14 template <class T, class V> 15 inline V evaluate_polynomial_c_imp(const T*, const V&, const boost::integral_constant<int, 0>*) BOOST_MATH_NOEXCEPT(V) 16 { 17 return static_cast<V>(0); 18 } 19 20 template <class T, class V> 21 inline V evaluate_polynomial_c_imp(const T* a, const V&, const boost::integral_constant<int, 1>*) BOOST_MATH_NOEXCEPT(V) 22 { 23 return static_cast<V>(a[0]); 24 } 25 26 template <class T, class V> 27 inline V evaluate_polynomial_c_imp(const T* a, const V& x, const boost::integral_constant<int, 2>*) BOOST_MATH_NOEXCEPT(V) 28 { 29 return static_cast<V>(a[1] * x + a[0]); 30 } 31 32 template <class T, class V> 33 inline V evaluate_polynomial_c_imp(const T* a, const V& x, const boost::integral_constant<int, 3>*) BOOST_MATH_NOEXCEPT(V) 34 { 35 return static_cast<V>((a[2] * x + a[1]) * x + a[0]); 36 } 37 38 template <class T, class V> 39 inline V evaluate_polynomial_c_imp(const T* a, const V& x, const boost::integral_constant<int, 4>*) BOOST_MATH_NOEXCEPT(V) 40 { 41 return static_cast<V>(((a[3] * x + a[2]) * x + a[1]) * x + a[0]); 42 } 43 44 template <class T, class V> 45 inline V evaluate_polynomial_c_imp(const T* a, const V& x, const boost::integral_constant<int, 5>*) BOOST_MATH_NOEXCEPT(V) 46 { 47 V x2 = x * x; 48 return static_cast<V>((a[4] * x2 + a[2]) * x2 + a[0] + (a[3] * x2 + a[1]) * x); 49 } 50 51 template <class T, class V> 52 inline V evaluate_polynomial_c_imp(const T* a, const V& x, const boost::integral_constant<int, 6>*) BOOST_MATH_NOEXCEPT(V) 53 { 54 V x2 = x * x; 55 return static_cast<V>(((a[5] * x2 + a[3]) * x2 + a[1]) * x + (a[4] * x2 + a[2]) * x2 + a[0]); 56 } 57 58 template <class T, class V> 59 inline V evaluate_polynomial_c_imp(const T* a, const V& x, const boost::integral_constant<int, 7>*) BOOST_MATH_NOEXCEPT(V) 60 { 61 V x2 = x * x; 62 return static_cast<V>(((a[6] * x2 + a[4]) * x2 + a[2]) * x2 + a[0] + ((a[5] * x2 + a[3]) * x2 + a[1]) * x); 63 } 64 65 template <class T, class V> 66 inline V evaluate_polynomial_c_imp(const T* a, const V& x, const boost::integral_constant<int, 8>*) BOOST_MATH_NOEXCEPT(V) 67 { 68 V x2 = x * x; 69 return static_cast<V>((((a[7] * x2 + a[5]) * x2 + a[3]) * x2 + a[1]) * x + ((a[6] * x2 + a[4]) * x2 + a[2]) * x2 + a[0]); 70 } 71 72 template <class T, class V> 73 inline V evaluate_polynomial_c_imp(const T* a, const V& x, const boost::integral_constant<int, 9>*) BOOST_MATH_NOEXCEPT(V) 74 { 75 V x2 = x * x; 76 return static_cast<V>((((a[8] * x2 + a[6]) * x2 + a[4]) * x2 + a[2]) * x2 + a[0] + (((a[7] * x2 + a[5]) * x2 + a[3]) * x2 + a[1]) * x); 77 } 78 79 template <class T, class V> 80 inline V evaluate_polynomial_c_imp(const T* a, const V& x, const boost::integral_constant<int, 10>*) BOOST_MATH_NOEXCEPT(V) 81 { 82 V x2 = x * x; 83 return static_cast<V>(((((a[9] * x2 + a[7]) * x2 + a[5]) * x2 + a[3]) * x2 + a[1]) * x + (((a[8] * x2 + a[6]) * x2 + a[4]) * x2 + a[2]) * x2 + a[0]); 84 } 85 86 87 }}}} // namespaces 88 89 #endif // include guard 90 91