]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/math/tools/detail/rational_horner3_16.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / math / tools / detail / rational_horner3_16.hpp
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_RAT_EVAL_16_HPP
10 #define BOOST_MATH_TOOLS_RAT_EVAL_16_HPP
11
12 namespace boost{ namespace math{ namespace tools{ namespace detail{
13
14 template <class T, class U, class V>
15 inline V evaluate_rational_c_imp(const T*, const U*, const V&, const mpl::int_<0>*) BOOST_MATH_NOEXCEPT(V)
16 {
17 return static_cast<V>(0);
18 }
19
20 template <class T, class U, class V>
21 inline V evaluate_rational_c_imp(const T* a, const U* b, const V&, const mpl::int_<1>*) BOOST_MATH_NOEXCEPT(V)
22 {
23 return static_cast<V>(a[0]) / static_cast<V>(b[0]);
24 }
25
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 mpl::int_<2>*) BOOST_MATH_NOEXCEPT(V)
28 {
29 return static_cast<V>((a[1] * x + a[0]) / (b[1] * x + b[0]));
30 }
31
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 mpl::int_<3>*) BOOST_MATH_NOEXCEPT(V)
34 {
35 return static_cast<V>(((a[2] * x + a[1]) * x + a[0]) / ((b[2] * x + b[1]) * x + b[0]));
36 }
37
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 mpl::int_<4>*) BOOST_MATH_NOEXCEPT(V)
40 {
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]));
42 }
43
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 mpl::int_<5>*) BOOST_MATH_NOEXCEPT(V)
46 {
47 if(x <= 1)
48 {
49 V x2 = x * x;
50 V t[4];
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];
55 t[0] *= x2;
56 t[2] *= x2;
57 t[0] += static_cast<V>(a[0]);
58 t[2] += static_cast<V>(b[0]);
59 t[1] *= x;
60 t[3] *= x;
61 return (t[0] + t[1]) / (t[2] + t[3]);
62 }
63 else
64 {
65 V z = 1 / x;
66 V z2 = 1 / (x * x);
67 V t[4];
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];
72 t[0] *= z2;
73 t[2] *= z2;
74 t[0] += static_cast<V>(a[4]);
75 t[2] += static_cast<V>(b[4]);
76 t[1] *= z;
77 t[3] *= z;
78 return (t[0] + t[1]) / (t[2] + t[3]);
79 }
80 }
81
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 mpl::int_<6>*) BOOST_MATH_NOEXCEPT(V)
84 {
85 if(x <= 1)
86 {
87 V x2 = x * x;
88 V t[4];
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];
93 t[0] *= x2;
94 t[1] *= x2;
95 t[2] *= x2;
96 t[3] *= x2;
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]);
101 t[0] *= x;
102 t[2] *= x;
103 return (t[0] + t[1]) / (t[2] + t[3]);
104 }
105 else
106 {
107 V z = 1 / x;
108 V z2 = 1 / (x * x);
109 V t[4];
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];
114 t[0] *= z2;
115 t[1] *= z2;
116 t[2] *= z2;
117 t[3] *= z2;
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]);
122 t[0] *= z;
123 t[2] *= z;
124 return (t[0] + t[1]) / (t[2] + t[3]);
125 }
126 }
127
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 mpl::int_<7>*) BOOST_MATH_NOEXCEPT(V)
130 {
131 if(x <= 1)
132 {
133 V x2 = x * x;
134 V t[4];
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];
139 t[0] *= x2;
140 t[1] *= x2;
141 t[2] *= x2;
142 t[3] *= x2;
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]);
147 t[0] *= x2;
148 t[2] *= x2;
149 t[0] += static_cast<V>(a[0]);
150 t[2] += static_cast<V>(b[0]);
151 t[1] *= x;
152 t[3] *= x;
153 return (t[0] + t[1]) / (t[2] + t[3]);
154 }
155 else
156 {
157 V z = 1 / x;
158 V z2 = 1 / (x * x);
159 V t[4];
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];
164 t[0] *= z2;
165 t[1] *= z2;
166 t[2] *= z2;
167 t[3] *= z2;
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]);
172 t[0] *= z2;
173 t[2] *= z2;
174 t[0] += static_cast<V>(a[6]);
175 t[2] += static_cast<V>(b[6]);
176 t[1] *= z;
177 t[3] *= z;
178 return (t[0] + t[1]) / (t[2] + t[3]);
179 }
180 }
181
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 mpl::int_<8>*) BOOST_MATH_NOEXCEPT(V)
184 {
185 if(x <= 1)
186 {
187 V x2 = x * x;
188 V t[4];
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];
193 t[0] *= x2;
194 t[1] *= x2;
195 t[2] *= x2;
196 t[3] *= x2;
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]);
201 t[0] *= x2;
202 t[1] *= x2;
203 t[2] *= x2;
204 t[3] *= x2;
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]);
209 t[0] *= x;
210 t[2] *= x;
211 return (t[0] + t[1]) / (t[2] + t[3]);
212 }
213 else
214 {
215 V z = 1 / x;
216 V z2 = 1 / (x * x);
217 V t[4];
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];
222 t[0] *= z2;
223 t[1] *= z2;
224 t[2] *= z2;
225 t[3] *= z2;
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]);
230 t[0] *= z2;
231 t[1] *= z2;
232 t[2] *= z2;
233 t[3] *= z2;
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]);
238 t[0] *= z;
239 t[2] *= z;
240 return (t[0] + t[1]) / (t[2] + t[3]);
241 }
242 }
243
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 mpl::int_<9>*) BOOST_MATH_NOEXCEPT(V)
246 {
247 if(x <= 1)
248 {
249 V x2 = x * x;
250 V t[4];
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];
255 t[0] *= x2;
256 t[1] *= x2;
257 t[2] *= x2;
258 t[3] *= x2;
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]);
263 t[0] *= x2;
264 t[1] *= x2;
265 t[2] *= x2;
266 t[3] *= x2;
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]);
271 t[0] *= x2;
272 t[2] *= x2;
273 t[0] += static_cast<V>(a[0]);
274 t[2] += static_cast<V>(b[0]);
275 t[1] *= x;
276 t[3] *= x;
277 return (t[0] + t[1]) / (t[2] + t[3]);
278 }
279 else
280 {
281 V z = 1 / x;
282 V z2 = 1 / (x * x);
283 V t[4];
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];
288 t[0] *= z2;
289 t[1] *= z2;
290 t[2] *= z2;
291 t[3] *= z2;
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]);
296 t[0] *= z2;
297 t[1] *= z2;
298 t[2] *= z2;
299 t[3] *= z2;
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]);
304 t[0] *= z2;
305 t[2] *= z2;
306 t[0] += static_cast<V>(a[8]);
307 t[2] += static_cast<V>(b[8]);
308 t[1] *= z;
309 t[3] *= z;
310 return (t[0] + t[1]) / (t[2] + t[3]);
311 }
312 }
313
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 mpl::int_<10>*) BOOST_MATH_NOEXCEPT(V)
316 {
317 if(x <= 1)
318 {
319 V x2 = x * x;
320 V t[4];
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];
325 t[0] *= x2;
326 t[1] *= x2;
327 t[2] *= x2;
328 t[3] *= x2;
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]);
333 t[0] *= x2;
334 t[1] *= x2;
335 t[2] *= x2;
336 t[3] *= x2;
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]);
341 t[0] *= x2;
342 t[1] *= x2;
343 t[2] *= x2;
344 t[3] *= x2;
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]);
349 t[0] *= x;
350 t[2] *= x;
351 return (t[0] + t[1]) / (t[2] + t[3]);
352 }
353 else
354 {
355 V z = 1 / x;
356 V z2 = 1 / (x * x);
357 V t[4];
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];
362 t[0] *= z2;
363 t[1] *= z2;
364 t[2] *= z2;
365 t[3] *= z2;
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]);
370 t[0] *= z2;
371 t[1] *= z2;
372 t[2] *= z2;
373 t[3] *= z2;
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]);
378 t[0] *= z2;
379 t[1] *= z2;
380 t[2] *= z2;
381 t[3] *= z2;
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]);
386 t[0] *= z;
387 t[2] *= z;
388 return (t[0] + t[1]) / (t[2] + t[3]);
389 }
390 }
391
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 mpl::int_<11>*) BOOST_MATH_NOEXCEPT(V)
394 {
395 if(x <= 1)
396 {
397 V x2 = x * x;
398 V t[4];
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];
403 t[0] *= x2;
404 t[1] *= x2;
405 t[2] *= x2;
406 t[3] *= x2;
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]);
411 t[0] *= x2;
412 t[1] *= x2;
413 t[2] *= x2;
414 t[3] *= x2;
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]);
419 t[0] *= x2;
420 t[1] *= x2;
421 t[2] *= x2;
422 t[3] *= x2;
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]);
427 t[0] *= x2;
428 t[2] *= x2;
429 t[0] += static_cast<V>(a[0]);
430 t[2] += static_cast<V>(b[0]);
431 t[1] *= x;
432 t[3] *= x;
433 return (t[0] + t[1]) / (t[2] + t[3]);
434 }
435 else
436 {
437 V z = 1 / x;
438 V z2 = 1 / (x * x);
439 V t[4];
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];
444 t[0] *= z2;
445 t[1] *= z2;
446 t[2] *= z2;
447 t[3] *= z2;
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]);
452 t[0] *= z2;
453 t[1] *= z2;
454 t[2] *= z2;
455 t[3] *= z2;
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]);
460 t[0] *= z2;
461 t[1] *= z2;
462 t[2] *= z2;
463 t[3] *= z2;
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]);
468 t[0] *= z2;
469 t[2] *= z2;
470 t[0] += static_cast<V>(a[10]);
471 t[2] += static_cast<V>(b[10]);
472 t[1] *= z;
473 t[3] *= z;
474 return (t[0] + t[1]) / (t[2] + t[3]);
475 }
476 }
477
478 template <class T, class U, class V>
479 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<12>*) BOOST_MATH_NOEXCEPT(V)
480 {
481 if(x <= 1)
482 {
483 V x2 = x * x;
484 V t[4];
485 t[0] = a[11] * x2 + a[9];
486 t[1] = a[10] * x2 + a[8];
487 t[2] = b[11] * x2 + b[9];
488 t[3] = b[10] * x2 + b[8];
489 t[0] *= x2;
490 t[1] *= x2;
491 t[2] *= x2;
492 t[3] *= x2;
493 t[0] += static_cast<V>(a[7]);
494 t[1] += static_cast<V>(a[6]);
495 t[2] += static_cast<V>(b[7]);
496 t[3] += static_cast<V>(b[6]);
497 t[0] *= x2;
498 t[1] *= x2;
499 t[2] *= x2;
500 t[3] *= x2;
501 t[0] += static_cast<V>(a[5]);
502 t[1] += static_cast<V>(a[4]);
503 t[2] += static_cast<V>(b[5]);
504 t[3] += static_cast<V>(b[4]);
505 t[0] *= x2;
506 t[1] *= x2;
507 t[2] *= x2;
508 t[3] *= x2;
509 t[0] += static_cast<V>(a[3]);
510 t[1] += static_cast<V>(a[2]);
511 t[2] += static_cast<V>(b[3]);
512 t[3] += static_cast<V>(b[2]);
513 t[0] *= x2;
514 t[1] *= x2;
515 t[2] *= x2;
516 t[3] *= x2;
517 t[0] += static_cast<V>(a[1]);
518 t[1] += static_cast<V>(a[0]);
519 t[2] += static_cast<V>(b[1]);
520 t[3] += static_cast<V>(b[0]);
521 t[0] *= x;
522 t[2] *= x;
523 return (t[0] + t[1]) / (t[2] + t[3]);
524 }
525 else
526 {
527 V z = 1 / x;
528 V z2 = 1 / (x * x);
529 V t[4];
530 t[0] = a[0] * z2 + a[2];
531 t[1] = a[1] * z2 + a[3];
532 t[2] = b[0] * z2 + b[2];
533 t[3] = b[1] * z2 + b[3];
534 t[0] *= z2;
535 t[1] *= z2;
536 t[2] *= z2;
537 t[3] *= z2;
538 t[0] += static_cast<V>(a[4]);
539 t[1] += static_cast<V>(a[5]);
540 t[2] += static_cast<V>(b[4]);
541 t[3] += static_cast<V>(b[5]);
542 t[0] *= z2;
543 t[1] *= z2;
544 t[2] *= z2;
545 t[3] *= z2;
546 t[0] += static_cast<V>(a[6]);
547 t[1] += static_cast<V>(a[7]);
548 t[2] += static_cast<V>(b[6]);
549 t[3] += static_cast<V>(b[7]);
550 t[0] *= z2;
551 t[1] *= z2;
552 t[2] *= z2;
553 t[3] *= z2;
554 t[0] += static_cast<V>(a[8]);
555 t[1] += static_cast<V>(a[9]);
556 t[2] += static_cast<V>(b[8]);
557 t[3] += static_cast<V>(b[9]);
558 t[0] *= z2;
559 t[1] *= z2;
560 t[2] *= z2;
561 t[3] *= z2;
562 t[0] += static_cast<V>(a[10]);
563 t[1] += static_cast<V>(a[11]);
564 t[2] += static_cast<V>(b[10]);
565 t[3] += static_cast<V>(b[11]);
566 t[0] *= z;
567 t[2] *= z;
568 return (t[0] + t[1]) / (t[2] + t[3]);
569 }
570 }
571
572 template <class T, class U, class V>
573 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<13>*) BOOST_MATH_NOEXCEPT(V)
574 {
575 if(x <= 1)
576 {
577 V x2 = x * x;
578 V t[4];
579 t[0] = a[12] * x2 + a[10];
580 t[1] = a[11] * x2 + a[9];
581 t[2] = b[12] * x2 + b[10];
582 t[3] = b[11] * x2 + b[9];
583 t[0] *= x2;
584 t[1] *= x2;
585 t[2] *= x2;
586 t[3] *= x2;
587 t[0] += static_cast<V>(a[8]);
588 t[1] += static_cast<V>(a[7]);
589 t[2] += static_cast<V>(b[8]);
590 t[3] += static_cast<V>(b[7]);
591 t[0] *= x2;
592 t[1] *= x2;
593 t[2] *= x2;
594 t[3] *= x2;
595 t[0] += static_cast<V>(a[6]);
596 t[1] += static_cast<V>(a[5]);
597 t[2] += static_cast<V>(b[6]);
598 t[3] += static_cast<V>(b[5]);
599 t[0] *= x2;
600 t[1] *= x2;
601 t[2] *= x2;
602 t[3] *= x2;
603 t[0] += static_cast<V>(a[4]);
604 t[1] += static_cast<V>(a[3]);
605 t[2] += static_cast<V>(b[4]);
606 t[3] += static_cast<V>(b[3]);
607 t[0] *= x2;
608 t[1] *= x2;
609 t[2] *= x2;
610 t[3] *= x2;
611 t[0] += static_cast<V>(a[2]);
612 t[1] += static_cast<V>(a[1]);
613 t[2] += static_cast<V>(b[2]);
614 t[3] += static_cast<V>(b[1]);
615 t[0] *= x2;
616 t[2] *= x2;
617 t[0] += static_cast<V>(a[0]);
618 t[2] += static_cast<V>(b[0]);
619 t[1] *= x;
620 t[3] *= x;
621 return (t[0] + t[1]) / (t[2] + t[3]);
622 }
623 else
624 {
625 V z = 1 / x;
626 V z2 = 1 / (x * x);
627 V t[4];
628 t[0] = a[0] * z2 + a[2];
629 t[1] = a[1] * z2 + a[3];
630 t[2] = b[0] * z2 + b[2];
631 t[3] = b[1] * z2 + b[3];
632 t[0] *= z2;
633 t[1] *= z2;
634 t[2] *= z2;
635 t[3] *= z2;
636 t[0] += static_cast<V>(a[4]);
637 t[1] += static_cast<V>(a[5]);
638 t[2] += static_cast<V>(b[4]);
639 t[3] += static_cast<V>(b[5]);
640 t[0] *= z2;
641 t[1] *= z2;
642 t[2] *= z2;
643 t[3] *= z2;
644 t[0] += static_cast<V>(a[6]);
645 t[1] += static_cast<V>(a[7]);
646 t[2] += static_cast<V>(b[6]);
647 t[3] += static_cast<V>(b[7]);
648 t[0] *= z2;
649 t[1] *= z2;
650 t[2] *= z2;
651 t[3] *= z2;
652 t[0] += static_cast<V>(a[8]);
653 t[1] += static_cast<V>(a[9]);
654 t[2] += static_cast<V>(b[8]);
655 t[3] += static_cast<V>(b[9]);
656 t[0] *= z2;
657 t[1] *= z2;
658 t[2] *= z2;
659 t[3] *= z2;
660 t[0] += static_cast<V>(a[10]);
661 t[1] += static_cast<V>(a[11]);
662 t[2] += static_cast<V>(b[10]);
663 t[3] += static_cast<V>(b[11]);
664 t[0] *= z2;
665 t[2] *= z2;
666 t[0] += static_cast<V>(a[12]);
667 t[2] += static_cast<V>(b[12]);
668 t[1] *= z;
669 t[3] *= z;
670 return (t[0] + t[1]) / (t[2] + t[3]);
671 }
672 }
673
674 template <class T, class U, class V>
675 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<14>*) BOOST_MATH_NOEXCEPT(V)
676 {
677 if(x <= 1)
678 {
679 V x2 = x * x;
680 V t[4];
681 t[0] = a[13] * x2 + a[11];
682 t[1] = a[12] * x2 + a[10];
683 t[2] = b[13] * x2 + b[11];
684 t[3] = b[12] * x2 + b[10];
685 t[0] *= x2;
686 t[1] *= x2;
687 t[2] *= x2;
688 t[3] *= x2;
689 t[0] += static_cast<V>(a[9]);
690 t[1] += static_cast<V>(a[8]);
691 t[2] += static_cast<V>(b[9]);
692 t[3] += static_cast<V>(b[8]);
693 t[0] *= x2;
694 t[1] *= x2;
695 t[2] *= x2;
696 t[3] *= x2;
697 t[0] += static_cast<V>(a[7]);
698 t[1] += static_cast<V>(a[6]);
699 t[2] += static_cast<V>(b[7]);
700 t[3] += static_cast<V>(b[6]);
701 t[0] *= x2;
702 t[1] *= x2;
703 t[2] *= x2;
704 t[3] *= x2;
705 t[0] += static_cast<V>(a[5]);
706 t[1] += static_cast<V>(a[4]);
707 t[2] += static_cast<V>(b[5]);
708 t[3] += static_cast<V>(b[4]);
709 t[0] *= x2;
710 t[1] *= x2;
711 t[2] *= x2;
712 t[3] *= x2;
713 t[0] += static_cast<V>(a[3]);
714 t[1] += static_cast<V>(a[2]);
715 t[2] += static_cast<V>(b[3]);
716 t[3] += static_cast<V>(b[2]);
717 t[0] *= x2;
718 t[1] *= x2;
719 t[2] *= x2;
720 t[3] *= x2;
721 t[0] += static_cast<V>(a[1]);
722 t[1] += static_cast<V>(a[0]);
723 t[2] += static_cast<V>(b[1]);
724 t[3] += static_cast<V>(b[0]);
725 t[0] *= x;
726 t[2] *= x;
727 return (t[0] + t[1]) / (t[2] + t[3]);
728 }
729 else
730 {
731 V z = 1 / x;
732 V z2 = 1 / (x * x);
733 V t[4];
734 t[0] = a[0] * z2 + a[2];
735 t[1] = a[1] * z2 + a[3];
736 t[2] = b[0] * z2 + b[2];
737 t[3] = b[1] * z2 + b[3];
738 t[0] *= z2;
739 t[1] *= z2;
740 t[2] *= z2;
741 t[3] *= z2;
742 t[0] += static_cast<V>(a[4]);
743 t[1] += static_cast<V>(a[5]);
744 t[2] += static_cast<V>(b[4]);
745 t[3] += static_cast<V>(b[5]);
746 t[0] *= z2;
747 t[1] *= z2;
748 t[2] *= z2;
749 t[3] *= z2;
750 t[0] += static_cast<V>(a[6]);
751 t[1] += static_cast<V>(a[7]);
752 t[2] += static_cast<V>(b[6]);
753 t[3] += static_cast<V>(b[7]);
754 t[0] *= z2;
755 t[1] *= z2;
756 t[2] *= z2;
757 t[3] *= z2;
758 t[0] += static_cast<V>(a[8]);
759 t[1] += static_cast<V>(a[9]);
760 t[2] += static_cast<V>(b[8]);
761 t[3] += static_cast<V>(b[9]);
762 t[0] *= z2;
763 t[1] *= z2;
764 t[2] *= z2;
765 t[3] *= z2;
766 t[0] += static_cast<V>(a[10]);
767 t[1] += static_cast<V>(a[11]);
768 t[2] += static_cast<V>(b[10]);
769 t[3] += static_cast<V>(b[11]);
770 t[0] *= z2;
771 t[1] *= z2;
772 t[2] *= z2;
773 t[3] *= z2;
774 t[0] += static_cast<V>(a[12]);
775 t[1] += static_cast<V>(a[13]);
776 t[2] += static_cast<V>(b[12]);
777 t[3] += static_cast<V>(b[13]);
778 t[0] *= z;
779 t[2] *= z;
780 return (t[0] + t[1]) / (t[2] + t[3]);
781 }
782 }
783
784 template <class T, class U, class V>
785 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<15>*) BOOST_MATH_NOEXCEPT(V)
786 {
787 if(x <= 1)
788 {
789 V x2 = x * x;
790 V t[4];
791 t[0] = a[14] * x2 + a[12];
792 t[1] = a[13] * x2 + a[11];
793 t[2] = b[14] * x2 + b[12];
794 t[3] = b[13] * x2 + b[11];
795 t[0] *= x2;
796 t[1] *= x2;
797 t[2] *= x2;
798 t[3] *= x2;
799 t[0] += static_cast<V>(a[10]);
800 t[1] += static_cast<V>(a[9]);
801 t[2] += static_cast<V>(b[10]);
802 t[3] += static_cast<V>(b[9]);
803 t[0] *= x2;
804 t[1] *= x2;
805 t[2] *= x2;
806 t[3] *= x2;
807 t[0] += static_cast<V>(a[8]);
808 t[1] += static_cast<V>(a[7]);
809 t[2] += static_cast<V>(b[8]);
810 t[3] += static_cast<V>(b[7]);
811 t[0] *= x2;
812 t[1] *= x2;
813 t[2] *= x2;
814 t[3] *= x2;
815 t[0] += static_cast<V>(a[6]);
816 t[1] += static_cast<V>(a[5]);
817 t[2] += static_cast<V>(b[6]);
818 t[3] += static_cast<V>(b[5]);
819 t[0] *= x2;
820 t[1] *= x2;
821 t[2] *= x2;
822 t[3] *= x2;
823 t[0] += static_cast<V>(a[4]);
824 t[1] += static_cast<V>(a[3]);
825 t[2] += static_cast<V>(b[4]);
826 t[3] += static_cast<V>(b[3]);
827 t[0] *= x2;
828 t[1] *= x2;
829 t[2] *= x2;
830 t[3] *= x2;
831 t[0] += static_cast<V>(a[2]);
832 t[1] += static_cast<V>(a[1]);
833 t[2] += static_cast<V>(b[2]);
834 t[3] += static_cast<V>(b[1]);
835 t[0] *= x2;
836 t[2] *= x2;
837 t[0] += static_cast<V>(a[0]);
838 t[2] += static_cast<V>(b[0]);
839 t[1] *= x;
840 t[3] *= x;
841 return (t[0] + t[1]) / (t[2] + t[3]);
842 }
843 else
844 {
845 V z = 1 / x;
846 V z2 = 1 / (x * x);
847 V t[4];
848 t[0] = a[0] * z2 + a[2];
849 t[1] = a[1] * z2 + a[3];
850 t[2] = b[0] * z2 + b[2];
851 t[3] = b[1] * z2 + b[3];
852 t[0] *= z2;
853 t[1] *= z2;
854 t[2] *= z2;
855 t[3] *= z2;
856 t[0] += static_cast<V>(a[4]);
857 t[1] += static_cast<V>(a[5]);
858 t[2] += static_cast<V>(b[4]);
859 t[3] += static_cast<V>(b[5]);
860 t[0] *= z2;
861 t[1] *= z2;
862 t[2] *= z2;
863 t[3] *= z2;
864 t[0] += static_cast<V>(a[6]);
865 t[1] += static_cast<V>(a[7]);
866 t[2] += static_cast<V>(b[6]);
867 t[3] += static_cast<V>(b[7]);
868 t[0] *= z2;
869 t[1] *= z2;
870 t[2] *= z2;
871 t[3] *= z2;
872 t[0] += static_cast<V>(a[8]);
873 t[1] += static_cast<V>(a[9]);
874 t[2] += static_cast<V>(b[8]);
875 t[3] += static_cast<V>(b[9]);
876 t[0] *= z2;
877 t[1] *= z2;
878 t[2] *= z2;
879 t[3] *= z2;
880 t[0] += static_cast<V>(a[10]);
881 t[1] += static_cast<V>(a[11]);
882 t[2] += static_cast<V>(b[10]);
883 t[3] += static_cast<V>(b[11]);
884 t[0] *= z2;
885 t[1] *= z2;
886 t[2] *= z2;
887 t[3] *= z2;
888 t[0] += static_cast<V>(a[12]);
889 t[1] += static_cast<V>(a[13]);
890 t[2] += static_cast<V>(b[12]);
891 t[3] += static_cast<V>(b[13]);
892 t[0] *= z2;
893 t[2] *= z2;
894 t[0] += static_cast<V>(a[14]);
895 t[2] += static_cast<V>(b[14]);
896 t[1] *= z;
897 t[3] *= z;
898 return (t[0] + t[1]) / (t[2] + t[3]);
899 }
900 }
901
902 template <class T, class U, class V>
903 inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<16>*) BOOST_MATH_NOEXCEPT(V)
904 {
905 if(x <= 1)
906 {
907 V x2 = x * x;
908 V t[4];
909 t[0] = a[15] * x2 + a[13];
910 t[1] = a[14] * x2 + a[12];
911 t[2] = b[15] * x2 + b[13];
912 t[3] = b[14] * x2 + b[12];
913 t[0] *= x2;
914 t[1] *= x2;
915 t[2] *= x2;
916 t[3] *= x2;
917 t[0] += static_cast<V>(a[11]);
918 t[1] += static_cast<V>(a[10]);
919 t[2] += static_cast<V>(b[11]);
920 t[3] += static_cast<V>(b[10]);
921 t[0] *= x2;
922 t[1] *= x2;
923 t[2] *= x2;
924 t[3] *= x2;
925 t[0] += static_cast<V>(a[9]);
926 t[1] += static_cast<V>(a[8]);
927 t[2] += static_cast<V>(b[9]);
928 t[3] += static_cast<V>(b[8]);
929 t[0] *= x2;
930 t[1] *= x2;
931 t[2] *= x2;
932 t[3] *= x2;
933 t[0] += static_cast<V>(a[7]);
934 t[1] += static_cast<V>(a[6]);
935 t[2] += static_cast<V>(b[7]);
936 t[3] += static_cast<V>(b[6]);
937 t[0] *= x2;
938 t[1] *= x2;
939 t[2] *= x2;
940 t[3] *= x2;
941 t[0] += static_cast<V>(a[5]);
942 t[1] += static_cast<V>(a[4]);
943 t[2] += static_cast<V>(b[5]);
944 t[3] += static_cast<V>(b[4]);
945 t[0] *= x2;
946 t[1] *= x2;
947 t[2] *= x2;
948 t[3] *= x2;
949 t[0] += static_cast<V>(a[3]);
950 t[1] += static_cast<V>(a[2]);
951 t[2] += static_cast<V>(b[3]);
952 t[3] += static_cast<V>(b[2]);
953 t[0] *= x2;
954 t[1] *= x2;
955 t[2] *= x2;
956 t[3] *= x2;
957 t[0] += static_cast<V>(a[1]);
958 t[1] += static_cast<V>(a[0]);
959 t[2] += static_cast<V>(b[1]);
960 t[3] += static_cast<V>(b[0]);
961 t[0] *= x;
962 t[2] *= x;
963 return (t[0] + t[1]) / (t[2] + t[3]);
964 }
965 else
966 {
967 V z = 1 / x;
968 V z2 = 1 / (x * x);
969 V t[4];
970 t[0] = a[0] * z2 + a[2];
971 t[1] = a[1] * z2 + a[3];
972 t[2] = b[0] * z2 + b[2];
973 t[3] = b[1] * z2 + b[3];
974 t[0] *= z2;
975 t[1] *= z2;
976 t[2] *= z2;
977 t[3] *= z2;
978 t[0] += static_cast<V>(a[4]);
979 t[1] += static_cast<V>(a[5]);
980 t[2] += static_cast<V>(b[4]);
981 t[3] += static_cast<V>(b[5]);
982 t[0] *= z2;
983 t[1] *= z2;
984 t[2] *= z2;
985 t[3] *= z2;
986 t[0] += static_cast<V>(a[6]);
987 t[1] += static_cast<V>(a[7]);
988 t[2] += static_cast<V>(b[6]);
989 t[3] += static_cast<V>(b[7]);
990 t[0] *= z2;
991 t[1] *= z2;
992 t[2] *= z2;
993 t[3] *= z2;
994 t[0] += static_cast<V>(a[8]);
995 t[1] += static_cast<V>(a[9]);
996 t[2] += static_cast<V>(b[8]);
997 t[3] += static_cast<V>(b[9]);
998 t[0] *= z2;
999 t[1] *= z2;
1000 t[2] *= z2;
1001 t[3] *= z2;
1002 t[0] += static_cast<V>(a[10]);
1003 t[1] += static_cast<V>(a[11]);
1004 t[2] += static_cast<V>(b[10]);
1005 t[3] += static_cast<V>(b[11]);
1006 t[0] *= z2;
1007 t[1] *= z2;
1008 t[2] *= z2;
1009 t[3] *= z2;
1010 t[0] += static_cast<V>(a[12]);
1011 t[1] += static_cast<V>(a[13]);
1012 t[2] += static_cast<V>(b[12]);
1013 t[3] += static_cast<V>(b[13]);
1014 t[0] *= z2;
1015 t[1] *= z2;
1016 t[2] *= z2;
1017 t[3] *= z2;
1018 t[0] += static_cast<V>(a[14]);
1019 t[1] += static_cast<V>(a[15]);
1020 t[2] += static_cast<V>(b[14]);
1021 t[3] += static_cast<V>(b[15]);
1022 t[0] *= z;
1023 t[2] *= z;
1024 return (t[0] + t[1]) / (t[2] + t[3]);
1025 }
1026 }
1027
1028
1029 }}}} // namespaces
1030
1031 #endif // include guard
1032