]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/math/tools/detail/rational_horner3_13.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / math / tools / detail / rational_horner3_13.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_13_HPP
10 #define BOOST_MATH_TOOLS_RAT_EVAL_13_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
675 }}}} // namespaces
676
677 #endif // include guard
678