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)
6 // This file is machine generated, do not edit by hand
8 // Polynomial evaluation using second order Horners rule
9 #ifndef BOOST_MATH_TOOLS_RAT_EVAL_11_HPP
10 #define BOOST_MATH_TOOLS_RAT_EVAL_11_HPP
12 namespace boost{ namespace math{ namespace tools{ namespace detail{
14 template <class T, class U, class V>
15 inline V evaluate_rational_c_imp(const T*, const U*, const V&, const std::integral_constant<int, 0>*) BOOST_MATH_NOEXCEPT(V)
17 return static_cast<V>(0);
20 template <class T, class U, class V>
21 inline V evaluate_rational_c_imp(const T* a, const U* b, const V&, const std::integral_constant<int, 1>*) BOOST_MATH_NOEXCEPT(V)
23 return static_cast<V>(a[0]) / static_cast<V>(b[0]);
26 template <class T, class U, class V>
27 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const std::integral_constant<int, 2>*) BOOST_MATH_NOEXCEPT(V)
29 return static_cast<V>((a[1] * x + a[0]) / (b[1] * x + b[0]));
32 template <class T, class U, class V>
33 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const std::integral_constant<int, 3>*) BOOST_MATH_NOEXCEPT(V)
35 return static_cast<V>(((a[2] * x + a[1]) * x + a[0]) / ((b[2] * x + b[1]) * x + b[0]));
38 template <class T, class U, class V>
39 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const std::integral_constant<int, 4>*) BOOST_MATH_NOEXCEPT(V)
41 return static_cast<V>((((a[3] * x + a[2]) * x + a[1]) * x + a[0]) / (((b[3] * x + b[2]) * x + b[1]) * x + b[0]));
44 template <class T, class U, class V>
45 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const std::integral_constant<int, 5>*) BOOST_MATH_NOEXCEPT(V)
51 t[0] = a[4] * x2 + a[2];
52 t[1] = a[3] * x2 + a[1];
53 t[2] = b[4] * x2 + b[2];
54 t[3] = b[3] * x2 + b[1];
57 t[0] += static_cast<V>(a[0]);
58 t[2] += static_cast<V>(b[0]);
61 return (t[0] + t[1]) / (t[2] + t[3]);
68 t[0] = a[0] * z2 + a[2];
69 t[1] = a[1] * z2 + a[3];
70 t[2] = b[0] * z2 + b[2];
71 t[3] = b[1] * z2 + b[3];
74 t[0] += static_cast<V>(a[4]);
75 t[2] += static_cast<V>(b[4]);
78 return (t[0] + t[1]) / (t[2] + t[3]);
82 template <class T, class U, class V>
83 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const std::integral_constant<int, 6>*) BOOST_MATH_NOEXCEPT(V)
89 t[0] = a[5] * x2 + a[3];
90 t[1] = a[4] * x2 + a[2];
91 t[2] = b[5] * x2 + b[3];
92 t[3] = b[4] * x2 + b[2];
97 t[0] += static_cast<V>(a[1]);
98 t[1] += static_cast<V>(a[0]);
99 t[2] += static_cast<V>(b[1]);
100 t[3] += static_cast<V>(b[0]);
103 return (t[0] + t[1]) / (t[2] + t[3]);
110 t[0] = a[0] * z2 + a[2];
111 t[1] = a[1] * z2 + a[3];
112 t[2] = b[0] * z2 + b[2];
113 t[3] = b[1] * z2 + b[3];
118 t[0] += static_cast<V>(a[4]);
119 t[1] += static_cast<V>(a[5]);
120 t[2] += static_cast<V>(b[4]);
121 t[3] += static_cast<V>(b[5]);
124 return (t[0] + t[1]) / (t[2] + t[3]);
128 template <class T, class U, class V>
129 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const std::integral_constant<int, 7>*) BOOST_MATH_NOEXCEPT(V)
135 t[0] = a[6] * x2 + a[4];
136 t[1] = a[5] * x2 + a[3];
137 t[2] = b[6] * x2 + b[4];
138 t[3] = b[5] * x2 + b[3];
143 t[0] += static_cast<V>(a[2]);
144 t[1] += static_cast<V>(a[1]);
145 t[2] += static_cast<V>(b[2]);
146 t[3] += static_cast<V>(b[1]);
149 t[0] += static_cast<V>(a[0]);
150 t[2] += static_cast<V>(b[0]);
153 return (t[0] + t[1]) / (t[2] + t[3]);
160 t[0] = a[0] * z2 + a[2];
161 t[1] = a[1] * z2 + a[3];
162 t[2] = b[0] * z2 + b[2];
163 t[3] = b[1] * z2 + b[3];
168 t[0] += static_cast<V>(a[4]);
169 t[1] += static_cast<V>(a[5]);
170 t[2] += static_cast<V>(b[4]);
171 t[3] += static_cast<V>(b[5]);
174 t[0] += static_cast<V>(a[6]);
175 t[2] += static_cast<V>(b[6]);
178 return (t[0] + t[1]) / (t[2] + t[3]);
182 template <class T, class U, class V>
183 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const std::integral_constant<int, 8>*) BOOST_MATH_NOEXCEPT(V)
189 t[0] = a[7] * x2 + a[5];
190 t[1] = a[6] * x2 + a[4];
191 t[2] = b[7] * x2 + b[5];
192 t[3] = b[6] * x2 + b[4];
197 t[0] += static_cast<V>(a[3]);
198 t[1] += static_cast<V>(a[2]);
199 t[2] += static_cast<V>(b[3]);
200 t[3] += static_cast<V>(b[2]);
205 t[0] += static_cast<V>(a[1]);
206 t[1] += static_cast<V>(a[0]);
207 t[2] += static_cast<V>(b[1]);
208 t[3] += static_cast<V>(b[0]);
211 return (t[0] + t[1]) / (t[2] + t[3]);
218 t[0] = a[0] * z2 + a[2];
219 t[1] = a[1] * z2 + a[3];
220 t[2] = b[0] * z2 + b[2];
221 t[3] = b[1] * z2 + b[3];
226 t[0] += static_cast<V>(a[4]);
227 t[1] += static_cast<V>(a[5]);
228 t[2] += static_cast<V>(b[4]);
229 t[3] += static_cast<V>(b[5]);
234 t[0] += static_cast<V>(a[6]);
235 t[1] += static_cast<V>(a[7]);
236 t[2] += static_cast<V>(b[6]);
237 t[3] += static_cast<V>(b[7]);
240 return (t[0] + t[1]) / (t[2] + t[3]);
244 template <class T, class U, class V>
245 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const std::integral_constant<int, 9>*) BOOST_MATH_NOEXCEPT(V)
251 t[0] = a[8] * x2 + a[6];
252 t[1] = a[7] * x2 + a[5];
253 t[2] = b[8] * x2 + b[6];
254 t[3] = b[7] * x2 + b[5];
259 t[0] += static_cast<V>(a[4]);
260 t[1] += static_cast<V>(a[3]);
261 t[2] += static_cast<V>(b[4]);
262 t[3] += static_cast<V>(b[3]);
267 t[0] += static_cast<V>(a[2]);
268 t[1] += static_cast<V>(a[1]);
269 t[2] += static_cast<V>(b[2]);
270 t[3] += static_cast<V>(b[1]);
273 t[0] += static_cast<V>(a[0]);
274 t[2] += static_cast<V>(b[0]);
277 return (t[0] + t[1]) / (t[2] + t[3]);
284 t[0] = a[0] * z2 + a[2];
285 t[1] = a[1] * z2 + a[3];
286 t[2] = b[0] * z2 + b[2];
287 t[3] = b[1] * z2 + b[3];
292 t[0] += static_cast<V>(a[4]);
293 t[1] += static_cast<V>(a[5]);
294 t[2] += static_cast<V>(b[4]);
295 t[3] += static_cast<V>(b[5]);
300 t[0] += static_cast<V>(a[6]);
301 t[1] += static_cast<V>(a[7]);
302 t[2] += static_cast<V>(b[6]);
303 t[3] += static_cast<V>(b[7]);
306 t[0] += static_cast<V>(a[8]);
307 t[2] += static_cast<V>(b[8]);
310 return (t[0] + t[1]) / (t[2] + t[3]);
314 template <class T, class U, class V>
315 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const std::integral_constant<int, 10>*) BOOST_MATH_NOEXCEPT(V)
321 t[0] = a[9] * x2 + a[7];
322 t[1] = a[8] * x2 + a[6];
323 t[2] = b[9] * x2 + b[7];
324 t[3] = b[8] * x2 + b[6];
329 t[0] += static_cast<V>(a[5]);
330 t[1] += static_cast<V>(a[4]);
331 t[2] += static_cast<V>(b[5]);
332 t[3] += static_cast<V>(b[4]);
337 t[0] += static_cast<V>(a[3]);
338 t[1] += static_cast<V>(a[2]);
339 t[2] += static_cast<V>(b[3]);
340 t[3] += static_cast<V>(b[2]);
345 t[0] += static_cast<V>(a[1]);
346 t[1] += static_cast<V>(a[0]);
347 t[2] += static_cast<V>(b[1]);
348 t[3] += static_cast<V>(b[0]);
351 return (t[0] + t[1]) / (t[2] + t[3]);
358 t[0] = a[0] * z2 + a[2];
359 t[1] = a[1] * z2 + a[3];
360 t[2] = b[0] * z2 + b[2];
361 t[3] = b[1] * z2 + b[3];
366 t[0] += static_cast<V>(a[4]);
367 t[1] += static_cast<V>(a[5]);
368 t[2] += static_cast<V>(b[4]);
369 t[3] += static_cast<V>(b[5]);
374 t[0] += static_cast<V>(a[6]);
375 t[1] += static_cast<V>(a[7]);
376 t[2] += static_cast<V>(b[6]);
377 t[3] += static_cast<V>(b[7]);
382 t[0] += static_cast<V>(a[8]);
383 t[1] += static_cast<V>(a[9]);
384 t[2] += static_cast<V>(b[8]);
385 t[3] += static_cast<V>(b[9]);
388 return (t[0] + t[1]) / (t[2] + t[3]);
392 template <class T, class U, class V>
393 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const std::integral_constant<int, 11>*) BOOST_MATH_NOEXCEPT(V)
399 t[0] = a[10] * x2 + a[8];
400 t[1] = a[9] * x2 + a[7];
401 t[2] = b[10] * x2 + b[8];
402 t[3] = b[9] * x2 + b[7];
407 t[0] += static_cast<V>(a[6]);
408 t[1] += static_cast<V>(a[5]);
409 t[2] += static_cast<V>(b[6]);
410 t[3] += static_cast<V>(b[5]);
415 t[0] += static_cast<V>(a[4]);
416 t[1] += static_cast<V>(a[3]);
417 t[2] += static_cast<V>(b[4]);
418 t[3] += static_cast<V>(b[3]);
423 t[0] += static_cast<V>(a[2]);
424 t[1] += static_cast<V>(a[1]);
425 t[2] += static_cast<V>(b[2]);
426 t[3] += static_cast<V>(b[1]);
429 t[0] += static_cast<V>(a[0]);
430 t[2] += static_cast<V>(b[0]);
433 return (t[0] + t[1]) / (t[2] + t[3]);
440 t[0] = a[0] * z2 + a[2];
441 t[1] = a[1] * z2 + a[3];
442 t[2] = b[0] * z2 + b[2];
443 t[3] = b[1] * z2 + b[3];
448 t[0] += static_cast<V>(a[4]);
449 t[1] += static_cast<V>(a[5]);
450 t[2] += static_cast<V>(b[4]);
451 t[3] += static_cast<V>(b[5]);
456 t[0] += static_cast<V>(a[6]);
457 t[1] += static_cast<V>(a[7]);
458 t[2] += static_cast<V>(b[6]);
459 t[3] += static_cast<V>(b[7]);
464 t[0] += static_cast<V>(a[8]);
465 t[1] += static_cast<V>(a[9]);
466 t[2] += static_cast<V>(b[8]);
467 t[3] += static_cast<V>(b[9]);
470 t[0] += static_cast<V>(a[10]);
471 t[2] += static_cast<V>(b[10]);
474 return (t[0] + t[1]) / (t[2] + t[3]);
481 #endif // include guard