1// math_fwd.hpp
2
3// TODO revise completely for new distribution classes.
4
5// Copyright Paul A. Bristow 2006.
6// Copyright John Maddock 2006.
7
8// Use, modification and distribution are subject to the
9// Boost Software License, Version 1.0.
10// (See accompanying file LICENSE_1_0.txt
11// or copy at http://www.boost.org/LICENSE_1_0.txt)
12
13// Omnibus list of forward declarations of math special functions.
14
15// IT = Integer type.
16// RT = Real type (built-in floating-point types, float, double, long double) & User Defined Types
17// AT = Integer or Real type
18
19#ifndef BOOST_MATH_SPECIAL_MATH_FWD_HPP
20#define BOOST_MATH_SPECIAL_MATH_FWD_HPP
21
22#ifdef _MSC_VER
23#pragma once
24#endif
25
26#include <vector>
27#include <boost/math/special_functions/detail/round_fwd.hpp>
28#include <boost/math/tools/promotion.hpp> // for argument promotion.
29#include <boost/math/policies/policy.hpp>
30#include <boost/mpl/comparison.hpp>
31#include <boost/utility/enable_if.hpp>
32#include <boost/config/no_tr1/complex.hpp>
33
34#define BOOST_NO_MACRO_EXPAND /**/
35
36namespace boost
37{
38 namespace math
39 { // Math functions (in roughly alphabetic order).
40
41 // Beta functions.
42 template <class RT1, class RT2>
43 typename tools::promote_args<RT1, RT2>::type
44 beta(RT1 a, RT2 b); // Beta function (2 arguments).
45
46 template <class RT1, class RT2, class A>
47 typename tools::promote_args<RT1, RT2, A>::type
48 beta(RT1 a, RT2 b, A x); // Beta function (3 arguments).
49
50 template <class RT1, class RT2, class RT3, class Policy>
51 typename tools::promote_args<RT1, RT2, RT3>::type
52 beta(RT1 a, RT2 b, RT3 x, const Policy& pol); // Beta function (3 arguments).
53
54 template <class RT1, class RT2, class RT3>
55 typename tools::promote_args<RT1, RT2, RT3>::type
56 betac(RT1 a, RT2 b, RT3 x);
57
58 template <class RT1, class RT2, class RT3, class Policy>
59 typename tools::promote_args<RT1, RT2, RT3>::type
60 betac(RT1 a, RT2 b, RT3 x, const Policy& pol);
61
62 template <class RT1, class RT2, class RT3>
63 typename tools::promote_args<RT1, RT2, RT3>::type
64 ibeta(RT1 a, RT2 b, RT3 x); // Incomplete beta function.
65
66 template <class RT1, class RT2, class RT3, class Policy>
67 typename tools::promote_args<RT1, RT2, RT3>::type
68 ibeta(RT1 a, RT2 b, RT3 x, const Policy& pol); // Incomplete beta function.
69
70 template <class RT1, class RT2, class RT3>
71 typename tools::promote_args<RT1, RT2, RT3>::type
72 ibetac(RT1 a, RT2 b, RT3 x); // Incomplete beta complement function.
73
74 template <class RT1, class RT2, class RT3, class Policy>
75 typename tools::promote_args<RT1, RT2, RT3>::type
76 ibetac(RT1 a, RT2 b, RT3 x, const Policy& pol); // Incomplete beta complement function.
77
78 template <class T1, class T2, class T3, class T4>
79 typename tools::promote_args<T1, T2, T3, T4>::type
80 ibeta_inv(T1 a, T2 b, T3 p, T4* py);
81
82 template <class T1, class T2, class T3, class T4, class Policy>
83 typename tools::promote_args<T1, T2, T3, T4>::type
84 ibeta_inv(T1 a, T2 b, T3 p, T4* py, const Policy& pol);
85
86 template <class RT1, class RT2, class RT3>
87 typename tools::promote_args<RT1, RT2, RT3>::type
88 ibeta_inv(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.
89
90 template <class RT1, class RT2, class RT3, class Policy>
91 typename tools::promote_args<RT1, RT2, RT3>::type
92 ibeta_inv(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.
93
94 template <class RT1, class RT2, class RT3>
95 typename tools::promote_args<RT1, RT2, RT3>::type
96 ibeta_inva(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.
97
98 template <class RT1, class RT2, class RT3, class Policy>
99 typename tools::promote_args<RT1, RT2, RT3>::type
100 ibeta_inva(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.
101
102 template <class RT1, class RT2, class RT3>
103 typename tools::promote_args<RT1, RT2, RT3>::type
104 ibeta_invb(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.
105
106 template <class RT1, class RT2, class RT3, class Policy>
107 typename tools::promote_args<RT1, RT2, RT3>::type
108 ibeta_invb(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.
109
110 template <class T1, class T2, class T3, class T4>
111 typename tools::promote_args<T1, T2, T3, T4>::type
112 ibetac_inv(T1 a, T2 b, T3 q, T4* py);
113
114 template <class T1, class T2, class T3, class T4, class Policy>
115 typename tools::promote_args<T1, T2, T3, T4>::type
116 ibetac_inv(T1 a, T2 b, T3 q, T4* py, const Policy& pol);
117
118 template <class RT1, class RT2, class RT3>
119 typename tools::promote_args<RT1, RT2, RT3>::type
120 ibetac_inv(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.
121
122 template <class RT1, class RT2, class RT3, class Policy>
123 typename tools::promote_args<RT1, RT2, RT3>::type
124 ibetac_inv(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.
125
126 template <class RT1, class RT2, class RT3>
127 typename tools::promote_args<RT1, RT2, RT3>::type
128 ibetac_inva(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.
129
130 template <class RT1, class RT2, class RT3, class Policy>
131 typename tools::promote_args<RT1, RT2, RT3>::type
132 ibetac_inva(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.
133
134 template <class RT1, class RT2, class RT3>
135 typename tools::promote_args<RT1, RT2, RT3>::type
136 ibetac_invb(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.
137
138 template <class RT1, class RT2, class RT3, class Policy>
139 typename tools::promote_args<RT1, RT2, RT3>::type
140 ibetac_invb(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.
141
142 template <class RT1, class RT2, class RT3>
143 typename tools::promote_args<RT1, RT2, RT3>::type
144 ibeta_derivative(RT1 a, RT2 b, RT3 x); // derivative of incomplete beta
145
146 template <class RT1, class RT2, class RT3, class Policy>
147 typename tools::promote_args<RT1, RT2, RT3>::type
148 ibeta_derivative(RT1 a, RT2 b, RT3 x, const Policy& pol); // derivative of incomplete beta
149
150 // Binomial:
151 template <class T, class Policy>
152 T binomial_coefficient(unsigned n, unsigned k, const Policy& pol);
153 template <class T>
154 T binomial_coefficient(unsigned n, unsigned k);
155
156 // erf & erfc error functions.
157 template <class RT> // Error function.
158 typename tools::promote_args<RT>::type erf(RT z);
159 template <class RT, class Policy> // Error function.
160 typename tools::promote_args<RT>::type erf(RT z, const Policy&);
161
162 template <class RT>// Error function complement.
163 typename tools::promote_args<RT>::type erfc(RT z);
164 template <class RT, class Policy>// Error function complement.
165 typename tools::promote_args<RT>::type erfc(RT z, const Policy&);
166
167 template <class RT>// Error function inverse.
168 typename tools::promote_args<RT>::type erf_inv(RT z);
169 template <class RT, class Policy>// Error function inverse.
170 typename tools::promote_args<RT>::type erf_inv(RT z, const Policy& pol);
171
172 template <class RT>// Error function complement inverse.
173 typename tools::promote_args<RT>::type erfc_inv(RT z);
174 template <class RT, class Policy>// Error function complement inverse.
175 typename tools::promote_args<RT>::type erfc_inv(RT z, const Policy& pol);
176
177 // Polynomials:
178 template <class T1, class T2, class T3>
179 typename tools::promote_args<T1, T2, T3>::type
180 legendre_next(unsigned l, T1 x, T2 Pl, T3 Plm1);
181
182 template <class T>
183 typename tools::promote_args<T>::type
184 legendre_p(int l, T x);
185 template <class T>
186 typename tools::promote_args<T>::type
187 legendre_p_prime(int l, T x);
188
189
190 template <class T, class Policy>
191 inline std::vector<T> legendre_p_zeros(int l, const Policy& pol);
192
193 template <class T>
194 inline std::vector<T> legendre_p_zeros(int l);
195
196#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
197 template <class T, class Policy>
198 typename boost::enable_if_c<policies::is_policy<Policy>::value, typename tools::promote_args<T>::type>::type
199 legendre_p(int l, T x, const Policy& pol);
200 template <class T, class Policy>
201 inline typename boost::enable_if_c<policies::is_policy<Policy>::value, typename tools::promote_args<T>::type>::type
202 legendre_p_prime(int l, T x, const Policy& pol);
203#endif
204 template <class T>
205 typename tools::promote_args<T>::type
206 legendre_q(unsigned l, T x);
207#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
208 template <class T, class Policy>
209 typename boost::enable_if_c<policies::is_policy<Policy>::value, typename tools::promote_args<T>::type>::type
210 legendre_q(unsigned l, T x, const Policy& pol);
211#endif
212 template <class T1, class T2, class T3>
213 typename tools::promote_args<T1, T2, T3>::type
214 legendre_next(unsigned l, unsigned m, T1 x, T2 Pl, T3 Plm1);
215
216 template <class T>
217 typename tools::promote_args<T>::type
218 legendre_p(int l, int m, T x);
219
220 template <class T, class Policy>
221 typename tools::promote_args<T>::type
222 legendre_p(int l, int m, T x, const Policy& pol);
223
224 template <class T1, class T2, class T3>
225 typename tools::promote_args<T1, T2, T3>::type
226 laguerre_next(unsigned n, T1 x, T2 Ln, T3 Lnm1);
227
228 template <class T1, class T2, class T3>
229 typename tools::promote_args<T1, T2, T3>::type
230 laguerre_next(unsigned n, unsigned l, T1 x, T2 Pl, T3 Plm1);
231
232 template <class T>
233 typename tools::promote_args<T>::type
234 laguerre(unsigned n, T x);
235
236 template <class T, class Policy>
237 typename tools::promote_args<T>::type
238 laguerre(unsigned n, unsigned m, T x, const Policy& pol);
239
240 template <class T1, class T2>
241 struct laguerre_result
242 {
243 typedef typename mpl::if_<
244 policies::is_policy<T2>,
245 typename tools::promote_args<T1>::type,
246 typename tools::promote_args<T2>::type
247 >::type type;
248 };
249
250 template <class T1, class T2>
251 typename laguerre_result<T1, T2>::type
252 laguerre(unsigned n, T1 m, T2 x);
253
254 template <class T>
255 typename tools::promote_args<T>::type
256 hermite(unsigned n, T x);
257
258 template <class T, class Policy>
259 typename tools::promote_args<T>::type
260 hermite(unsigned n, T x, const Policy& pol);
261
262 template <class T1, class T2, class T3>
263 typename tools::promote_args<T1, T2, T3>::type
264 hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1);
265
266 template <class T1, class T2>
267 std::complex<typename tools::promote_args<T1, T2>::type>
268 spherical_harmonic(unsigned n, int m, T1 theta, T2 phi);
269
270 template <class T1, class T2, class Policy>
271 std::complex<typename tools::promote_args<T1, T2>::type>
272 spherical_harmonic(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);
273
274 template <class T1, class T2>
275 typename tools::promote_args<T1, T2>::type
276 spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi);
277
278 template <class T1, class T2, class Policy>
279 typename tools::promote_args<T1, T2>::type
280 spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);
281
282 template <class T1, class T2>
283 typename tools::promote_args<T1, T2>::type
284 spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi);
285
286 template <class T1, class T2, class Policy>
287 typename tools::promote_args<T1, T2>::type
288 spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);
289
290 // Elliptic integrals:
291 template <class T1, class T2, class T3>
292 typename tools::promote_args<T1, T2, T3>::type
293 ellint_rf(T1 x, T2 y, T3 z);
294
295 template <class T1, class T2, class T3, class Policy>
296 typename tools::promote_args<T1, T2, T3>::type
297 ellint_rf(T1 x, T2 y, T3 z, const Policy& pol);
298
299 template <class T1, class T2, class T3>
300 typename tools::promote_args<T1, T2, T3>::type
301 ellint_rd(T1 x, T2 y, T3 z);
302
303 template <class T1, class T2, class T3, class Policy>
304 typename tools::promote_args<T1, T2, T3>::type
305 ellint_rd(T1 x, T2 y, T3 z, const Policy& pol);
306
307 template <class T1, class T2>
308 typename tools::promote_args<T1, T2>::type
309 ellint_rc(T1 x, T2 y);
310
311 template <class T1, class T2, class Policy>
312 typename tools::promote_args<T1, T2>::type
313 ellint_rc(T1 x, T2 y, const Policy& pol);
314
315 template <class T1, class T2, class T3, class T4>
316 typename tools::promote_args<T1, T2, T3, T4>::type
317 ellint_rj(T1 x, T2 y, T3 z, T4 p);
318
319 template <class T1, class T2, class T3, class T4, class Policy>
320 typename tools::promote_args<T1, T2, T3, T4>::type
321 ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy& pol);
322
323 template <class T1, class T2, class T3>
324 typename tools::promote_args<T1, T2, T3>::type
325 ellint_rg(T1 x, T2 y, T3 z);
326
327 template <class T1, class T2, class T3, class Policy>
328 typename tools::promote_args<T1, T2, T3>::type
329 ellint_rg(T1 x, T2 y, T3 z, const Policy& pol);
330
331 template <typename T>
332 typename tools::promote_args<T>::type ellint_2(T k);
333
334 template <class T1, class T2>
335 typename tools::promote_args<T1, T2>::type ellint_2(T1 k, T2 phi);
336
337 template <class T1, class T2, class Policy>
338 typename tools::promote_args<T1, T2>::type ellint_2(T1 k, T2 phi, const Policy& pol);
339
340 template <typename T>
341 typename tools::promote_args<T>::type ellint_1(T k);
342
343 template <class T1, class T2>
344 typename tools::promote_args<T1, T2>::type ellint_1(T1 k, T2 phi);
345
346 template <class T1, class T2, class Policy>
347 typename tools::promote_args<T1, T2>::type ellint_1(T1 k, T2 phi, const Policy& pol);
348
349 template <typename T>
350 typename tools::promote_args<T>::type ellint_d(T k);
351
352 template <class T1, class T2>
353 typename tools::promote_args<T1, T2>::type ellint_d(T1 k, T2 phi);
354
355 template <class T1, class T2, class Policy>
356 typename tools::promote_args<T1, T2>::type ellint_d(T1 k, T2 phi, const Policy& pol);
357
358 template <class T1, class T2>
359 typename tools::promote_args<T1, T2>::type jacobi_zeta(T1 k, T2 phi);
360
361 template <class T1, class T2, class Policy>
362 typename tools::promote_args<T1, T2>::type jacobi_zeta(T1 k, T2 phi, const Policy& pol);
363
364 template <class T1, class T2>
365 typename tools::promote_args<T1, T2>::type heuman_lambda(T1 k, T2 phi);
366
367 template <class T1, class T2, class Policy>
368 typename tools::promote_args<T1, T2>::type heuman_lambda(T1 k, T2 phi, const Policy& pol);
369
370 namespace detail{
371
372 template <class T, class U, class V>
373 struct ellint_3_result
374 {
375 typedef typename mpl::if_<
376 policies::is_policy<V>,
377 typename tools::promote_args<T, U>::type,
378 typename tools::promote_args<T, U, V>::type
379 >::type type;
380 };
381
382 } // namespace detail
383
384
385 template <class T1, class T2, class T3>
386 typename detail::ellint_3_result<T1, T2, T3>::type ellint_3(T1 k, T2 v, T3 phi);
387
388 template <class T1, class T2, class T3, class Policy>
389 typename tools::promote_args<T1, T2, T3>::type ellint_3(T1 k, T2 v, T3 phi, const Policy& pol);
390
391 template <class T1, class T2>
392 typename tools::promote_args<T1, T2>::type ellint_3(T1 k, T2 v);
393
394 // Factorial functions.
395 // Note: not for integral types, at present.
396 template <class RT>
397 struct max_factorial;
398 template <class RT>
399 RT factorial(unsigned int);
400 template <class RT, class Policy>
401 RT factorial(unsigned int, const Policy& pol);
402 template <class RT>
403 RT unchecked_factorial(unsigned int BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(RT));
404 template <class RT>
405 RT double_factorial(unsigned i);
406 template <class RT, class Policy>
407 RT double_factorial(unsigned i, const Policy& pol);
408
409 template <class RT>
410 typename tools::promote_args<RT>::type falling_factorial(RT x, unsigned n);
411
412 template <class RT, class Policy>
413 typename tools::promote_args<RT>::type falling_factorial(RT x, unsigned n, const Policy& pol);
414
415 template <class RT>
416 typename tools::promote_args<RT>::type rising_factorial(RT x, int n);
417
418 template <class RT, class Policy>
419 typename tools::promote_args<RT>::type rising_factorial(RT x, int n, const Policy& pol);
420
421 // Gamma functions.
422 template <class RT>
423 typename tools::promote_args<RT>::type tgamma(RT z);
424
425 template <class RT>
426 typename tools::promote_args<RT>::type tgamma1pm1(RT z);
427
428 template <class RT, class Policy>
429 typename tools::promote_args<RT>::type tgamma1pm1(RT z, const Policy& pol);
430
431 template <class RT1, class RT2>
432 typename tools::promote_args<RT1, RT2>::type tgamma(RT1 a, RT2 z);
433
434 template <class RT1, class RT2, class Policy>
435 typename tools::promote_args<RT1, RT2>::type tgamma(RT1 a, RT2 z, const Policy& pol);
436
437 template <class RT>
438 typename tools::promote_args<RT>::type lgamma(RT z, int* sign);
439
440 template <class RT, class Policy>
441 typename tools::promote_args<RT>::type lgamma(RT z, int* sign, const Policy& pol);
442
443 template <class RT>
444 typename tools::promote_args<RT>::type lgamma(RT x);
445
446 template <class RT, class Policy>
447 typename tools::promote_args<RT>::type lgamma(RT x, const Policy& pol);
448
449 template <class RT1, class RT2>
450 typename tools::promote_args<RT1, RT2>::type tgamma_lower(RT1 a, RT2 z);
451
452 template <class RT1, class RT2, class Policy>
453 typename tools::promote_args<RT1, RT2>::type tgamma_lower(RT1 a, RT2 z, const Policy&);
454
455 template <class RT1, class RT2>
456 typename tools::promote_args<RT1, RT2>::type gamma_q(RT1 a, RT2 z);
457
458 template <class RT1, class RT2, class Policy>
459 typename tools::promote_args<RT1, RT2>::type gamma_q(RT1 a, RT2 z, const Policy&);
460
461 template <class RT1, class RT2>
462 typename tools::promote_args<RT1, RT2>::type gamma_p(RT1 a, RT2 z);
463
464 template <class RT1, class RT2, class Policy>
465 typename tools::promote_args<RT1, RT2>::type gamma_p(RT1 a, RT2 z, const Policy&);
466
467 template <class T1, class T2>
468 typename tools::promote_args<T1, T2>::type tgamma_delta_ratio(T1 z, T2 delta);
469
470 template <class T1, class T2, class Policy>
471 typename tools::promote_args<T1, T2>::type tgamma_delta_ratio(T1 z, T2 delta, const Policy&);
472
473 template <class T1, class T2>
474 typename tools::promote_args<T1, T2>::type tgamma_ratio(T1 a, T2 b);
475
476 template <class T1, class T2, class Policy>
477 typename tools::promote_args<T1, T2>::type tgamma_ratio(T1 a, T2 b, const Policy&);
478
479 template <class T1, class T2>
480 typename tools::promote_args<T1, T2>::type gamma_p_derivative(T1 a, T2 x);
481
482 template <class T1, class T2, class Policy>
483 typename tools::promote_args<T1, T2>::type gamma_p_derivative(T1 a, T2 x, const Policy&);
484
485 // gamma inverse.
486 template <class T1, class T2>
487 typename tools::promote_args<T1, T2>::type gamma_p_inv(T1 a, T2 p);
488
489 template <class T1, class T2, class Policy>
490 typename tools::promote_args<T1, T2>::type gamma_p_inva(T1 a, T2 p, const Policy&);
491
492 template <class T1, class T2>
493 typename tools::promote_args<T1, T2>::type gamma_p_inva(T1 a, T2 p);
494
495 template <class T1, class T2, class Policy>
496 typename tools::promote_args<T1, T2>::type gamma_p_inv(T1 a, T2 p, const Policy&);
497
498 template <class T1, class T2>
499 typename tools::promote_args<T1, T2>::type gamma_q_inv(T1 a, T2 q);
500
501 template <class T1, class T2, class Policy>
502 typename tools::promote_args<T1, T2>::type gamma_q_inv(T1 a, T2 q, const Policy&);
503
504 template <class T1, class T2>
505 typename tools::promote_args<T1, T2>::type gamma_q_inva(T1 a, T2 q);
506
507 template <class T1, class T2, class Policy>
508 typename tools::promote_args<T1, T2>::type gamma_q_inva(T1 a, T2 q, const Policy&);
509
510 // digamma:
511 template <class T>
512 typename tools::promote_args<T>::type digamma(T x);
513
514 template <class T, class Policy>
515 typename tools::promote_args<T>::type digamma(T x, const Policy&);
516
517 // trigamma:
518 template <class T>
519 typename tools::promote_args<T>::type trigamma(T x);
520
521 template <class T, class Policy>
522 typename tools::promote_args<T>::type trigamma(T x, const Policy&);
523
524 // polygamma:
525 template <class T>
526 typename tools::promote_args<T>::type polygamma(int n, T x);
527
528 template <class T, class Policy>
529 typename tools::promote_args<T>::type polygamma(int n, T x, const Policy&);
530
531 // Hypotenuse function sqrt(x ^ 2 + y ^ 2).
532 template <class T1, class T2>
533 typename tools::promote_args<T1, T2>::type
534 hypot(T1 x, T2 y);
535
536 template <class T1, class T2, class Policy>
537 typename tools::promote_args<T1, T2>::type
538 hypot(T1 x, T2 y, const Policy&);
539
540 // cbrt - cube root.
541 template <class RT>
542 typename tools::promote_args<RT>::type cbrt(RT z);
543
544 template <class RT, class Policy>
545 typename tools::promote_args<RT>::type cbrt(RT z, const Policy&);
546
547 // log1p is log(x + 1)
548 template <class T>
549 typename tools::promote_args<T>::type log1p(T);
550
551 template <class T, class Policy>
552 typename tools::promote_args<T>::type log1p(T, const Policy&);
553
554 // log1pmx is log(x + 1) - x
555 template <class T>
556 typename tools::promote_args<T>::type log1pmx(T);
557
558 template <class T, class Policy>
559 typename tools::promote_args<T>::type log1pmx(T, const Policy&);
560
561 // Exp (x) minus 1 functions.
562 template <class T>
563 typename tools::promote_args<T>::type expm1(T);
564
565 template <class T, class Policy>
566 typename tools::promote_args<T>::type expm1(T, const Policy&);
567
568 // Power - 1
569 template <class T1, class T2>
570 typename tools::promote_args<T1, T2>::type
571 powm1(const T1 a, const T2 z);
572
573 template <class T1, class T2, class Policy>
574 typename tools::promote_args<T1, T2>::type
575 powm1(const T1 a, const T2 z, const Policy&);
576
577 // sqrt(1+x) - 1
578 template <class T>
579 typename tools::promote_args<T>::type sqrt1pm1(const T& val);
580
581 template <class T, class Policy>
582 typename tools::promote_args<T>::type sqrt1pm1(const T& val, const Policy&);
583
584 // sinus cardinals:
585 template <class T>
586 typename tools::promote_args<T>::type sinc_pi(T x);
587
588 template <class T, class Policy>
589 typename tools::promote_args<T>::type sinc_pi(T x, const Policy&);
590
591 template <class T>
592 typename tools::promote_args<T>::type sinhc_pi(T x);
593
594 template <class T, class Policy>
595 typename tools::promote_args<T>::type sinhc_pi(T x, const Policy&);
596
597 // inverse hyperbolics:
598 template<typename T>
599 typename tools::promote_args<T>::type asinh(T x);
600
601 template<typename T, class Policy>
602 typename tools::promote_args<T>::type asinh(T x, const Policy&);
603
604 template<typename T>
605 typename tools::promote_args<T>::type acosh(T x);
606
607 template<typename T, class Policy>
608 typename tools::promote_args<T>::type acosh(T x, const Policy&);
609
610 template<typename T>
611 typename tools::promote_args<T>::type atanh(T x);
612
613 template<typename T, class Policy>
614 typename tools::promote_args<T>::type atanh(T x, const Policy&);
615
616 namespace detail{
617
618 typedef mpl::int_<0> bessel_no_int_tag; // No integer optimisation possible.
619 typedef mpl::int_<1> bessel_maybe_int_tag; // Maybe integer optimisation.
620 typedef mpl::int_<2> bessel_int_tag; // Definite integer optimistaion.
621
622 template <class T1, class T2, class Policy>
623 struct bessel_traits
624 {
625 typedef typename mpl::if_<
626 is_integral<T1>,
627 typename tools::promote_args<T2>::type,
628 typename tools::promote_args<T1, T2>::type
629 >::type result_type;
630
631 typedef typename policies::precision<result_type, Policy>::type precision_type;
632
633 typedef typename mpl::if_<
634 mpl::or_<
635 mpl::less_equal<precision_type, mpl::int_<0> >,
636 mpl::greater<precision_type, mpl::int_<64> > >,
637 bessel_no_int_tag,
638 typename mpl::if_<
639 is_integral<T1>,
640 bessel_int_tag,
641 bessel_maybe_int_tag
642 >::type
643 >::type optimisation_tag;
644 typedef typename mpl::if_<
645 mpl::or_<
646 mpl::less_equal<precision_type, mpl::int_<0> >,
647 mpl::greater<precision_type, mpl::int_<113> > >,
648 bessel_no_int_tag,
649 typename mpl::if_<
650 is_integral<T1>,
651 bessel_int_tag,
652 bessel_maybe_int_tag
653 >::type
654 >::type optimisation_tag128;
655 };
656 } // detail
657
658 // Bessel functions:
659 template <class T1, class T2, class Policy>
660 typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_j(T1 v, T2 x, const Policy& pol);
661 template <class T1, class T2, class Policy>
662 typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_j_prime(T1 v, T2 x, const Policy& pol);
663
664 template <class T1, class T2>
665 typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_j(T1 v, T2 x);
666 template <class T1, class T2>
667 typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_j_prime(T1 v, T2 x);
668
669 template <class T, class Policy>
670 typename detail::bessel_traits<T, T, Policy>::result_type sph_bessel(unsigned v, T x, const Policy& pol);
671 template <class T, class Policy>
672 typename detail::bessel_traits<T, T, Policy>::result_type sph_bessel_prime(unsigned v, T x, const Policy& pol);
673
674 template <class T>
675 typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_bessel(unsigned v, T x);
676 template <class T>
677 typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_bessel_prime(unsigned v, T x);
678
679 template <class T1, class T2, class Policy>
680 typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_i(T1 v, T2 x, const Policy& pol);
681 template <class T1, class T2, class Policy>
682 typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_i_prime(T1 v, T2 x, const Policy& pol);
683
684 template <class T1, class T2>
685 typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_i(T1 v, T2 x);
686 template <class T1, class T2>
687 typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_i_prime(T1 v, T2 x);
688
689 template <class T1, class T2, class Policy>
690 typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_k(T1 v, T2 x, const Policy& pol);
691 template <class T1, class T2, class Policy>
692 typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_k_prime(T1 v, T2 x, const Policy& pol);
693
694 template <class T1, class T2>
695 typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_k(T1 v, T2 x);
696 template <class T1, class T2>
697 typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_k_prime(T1 v, T2 x);
698
699 template <class T1, class T2, class Policy>
700 typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_neumann(T1 v, T2 x, const Policy& pol);
701 template <class T1, class T2, class Policy>
702 typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_neumann_prime(T1 v, T2 x, const Policy& pol);
703
704 template <class T1, class T2>
705 typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_neumann(T1 v, T2 x);
706 template <class T1, class T2>
707 typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_neumann_prime(T1 v, T2 x);
708
709 template <class T, class Policy>
710 typename detail::bessel_traits<T, T, Policy>::result_type sph_neumann(unsigned v, T x, const Policy& pol);
711 template <class T, class Policy>
712 typename detail::bessel_traits<T, T, Policy>::result_type sph_neumann_prime(unsigned v, T x, const Policy& pol);
713
714 template <class T>
715 typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_neumann(unsigned v, T x);
716 template <class T>
717 typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_neumann_prime(unsigned v, T x);
718
719 template <class T, class Policy>
720 typename detail::bessel_traits<T, T, Policy>::result_type cyl_bessel_j_zero(T v, int m, const Policy& pol);
721
722 template <class T>
723 typename detail::bessel_traits<T, T, policies::policy<> >::result_type cyl_bessel_j_zero(T v, int m);
724
725 template <class T, class OutputIterator>
726 OutputIterator cyl_bessel_j_zero(T v,
727 int start_index,
728 unsigned number_of_zeros,
729 OutputIterator out_it);
730
731 template <class T, class OutputIterator, class Policy>
732 OutputIterator cyl_bessel_j_zero(T v,
733 int start_index,
734 unsigned number_of_zeros,
735 OutputIterator out_it,
736 const Policy&);
737
738 template <class T, class Policy>
739 typename detail::bessel_traits<T, T, Policy>::result_type cyl_neumann_zero(T v, int m, const Policy& pol);
740
741 template <class T>
742 typename detail::bessel_traits<T, T, policies::policy<> >::result_type cyl_neumann_zero(T v, int m);
743
744 template <class T, class OutputIterator>
745 OutputIterator cyl_neumann_zero(T v,
746 int start_index,
747 unsigned number_of_zeros,
748 OutputIterator out_it);
749
750 template <class T, class OutputIterator, class Policy>
751 OutputIterator cyl_neumann_zero(T v,
752 int start_index,
753 unsigned number_of_zeros,
754 OutputIterator out_it,
755 const Policy&);
756
757 template <class T1, class T2>
758 std::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> cyl_hankel_1(T1 v, T2 x);
759
760 template <class T1, class T2, class Policy>
761 std::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> cyl_hankel_1(T1 v, T2 x, const Policy& pol);
762
763 template <class T1, class T2, class Policy>
764 std::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> cyl_hankel_2(T1 v, T2 x, const Policy& pol);
765
766 template <class T1, class T2>
767 std::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> cyl_hankel_2(T1 v, T2 x);
768
769 template <class T1, class T2, class Policy>
770 std::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> sph_hankel_1(T1 v, T2 x, const Policy& pol);
771
772 template <class T1, class T2>
773 std::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> sph_hankel_1(T1 v, T2 x);
774
775 template <class T1, class T2, class Policy>
776 std::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> sph_hankel_2(T1 v, T2 x, const Policy& pol);
777
778 template <class T1, class T2>
779 std::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> sph_hankel_2(T1 v, T2 x);
780
781 template <class T, class Policy>
782 typename tools::promote_args<T>::type airy_ai(T x, const Policy&);
783
784 template <class T>
785 typename tools::promote_args<T>::type airy_ai(T x);
786
787 template <class T, class Policy>
788 typename tools::promote_args<T>::type airy_bi(T x, const Policy&);
789
790 template <class T>
791 typename tools::promote_args<T>::type airy_bi(T x);
792
793 template <class T, class Policy>
794 typename tools::promote_args<T>::type airy_ai_prime(T x, const Policy&);
795
796 template <class T>
797 typename tools::promote_args<T>::type airy_ai_prime(T x);
798
799 template <class T, class Policy>
800 typename tools::promote_args<T>::type airy_bi_prime(T x, const Policy&);
801
802 template <class T>
803 typename tools::promote_args<T>::type airy_bi_prime(T x);
804
805 template <class T>
806 T airy_ai_zero(int m);
807 template <class T, class Policy>
808 T airy_ai_zero(int m, const Policy&);
809
810 template <class OutputIterator>
811 OutputIterator airy_ai_zero(
812 int start_index,
813 unsigned number_of_zeros,
814 OutputIterator out_it);
815 template <class OutputIterator, class Policy>
816 OutputIterator airy_ai_zero(
817 int start_index,
818 unsigned number_of_zeros,
819 OutputIterator out_it,
820 const Policy&);
821
822 template <class T>
823 T airy_bi_zero(int m);
824 template <class T, class Policy>
825 T airy_bi_zero(int m, const Policy&);
826
827 template <class OutputIterator>
828 OutputIterator airy_bi_zero(
829 int start_index,
830 unsigned number_of_zeros,
831 OutputIterator out_it);
832 template <class OutputIterator, class Policy>
833 OutputIterator airy_bi_zero(
834 int start_index,
835 unsigned number_of_zeros,
836 OutputIterator out_it,
837 const Policy&);
838
839 template <class T, class Policy>
840 typename tools::promote_args<T>::type sin_pi(T x, const Policy&);
841
842 template <class T>
843 typename tools::promote_args<T>::type sin_pi(T x);
844
845 template <class T, class Policy>
846 typename tools::promote_args<T>::type cos_pi(T x, const Policy&);
847
848 template <class T>
849 typename tools::promote_args<T>::type cos_pi(T x);
850
851 template <class T>
852 int fpclassify BOOST_NO_MACRO_EXPAND(T t);
853
854 template <class T>
855 bool isfinite BOOST_NO_MACRO_EXPAND(T z);
856
857 template <class T>
858 bool isinf BOOST_NO_MACRO_EXPAND(T t);
859
860 template <class T>
861 bool isnan BOOST_NO_MACRO_EXPAND(T t);
862
863 template <class T>
864 bool isnormal BOOST_NO_MACRO_EXPAND(T t);
865
866 template<class T>
867 int signbit BOOST_NO_MACRO_EXPAND(T x);
868
869 template <class T>
870 int sign BOOST_NO_MACRO_EXPAND(const T& z);
871
872 template <class T, class U>
873 typename tools::promote_args_permissive<T, U>::type copysign BOOST_NO_MACRO_EXPAND(const T& x, const U& y);
874
875 template <class T>
876 typename tools::promote_args_permissive<T>::type changesign BOOST_NO_MACRO_EXPAND(const T& z);
877
878 // Exponential integrals:
879 namespace detail{
880
881 template <class T, class U>
882 struct expint_result
883 {
884 typedef typename mpl::if_<
885 policies::is_policy<U>,
886 typename tools::promote_args<T>::type,
887 typename tools::promote_args<U>::type
888 >::type type;
889 };
890
891 } // namespace detail
892
893 template <class T, class Policy>
894 typename tools::promote_args<T>::type expint(unsigned n, T z, const Policy&);
895
896 template <class T, class U>
897 typename detail::expint_result<T, U>::type expint(T const z, U const u);
898
899 template <class T>
900 typename tools::promote_args<T>::type expint(T z);
901
902 // Zeta:
903 template <class T, class Policy>
904 typename tools::promote_args<T>::type zeta(T s, const Policy&);
905
906 // Owen's T function:
907 template <class T1, class T2, class Policy>
908 typename tools::promote_args<T1, T2>::type owens_t(T1 h, T2 a, const Policy& pol);
909
910 template <class T1, class T2>
911 typename tools::promote_args<T1, T2>::type owens_t(T1 h, T2 a);
912
913 // Jacobi Functions:
914 template <class T, class U, class V, class Policy>
915 typename tools::promote_args<T, U, V>::type jacobi_elliptic(T k, U theta, V* pcn, V* pdn, const Policy&);
916
917 template <class T, class U, class V>
918 typename tools::promote_args<T, U, V>::type jacobi_elliptic(T k, U theta, V* pcn = 0, V* pdn = 0);
919
920 template <class U, class T, class Policy>
921 typename tools::promote_args<T, U>::type jacobi_sn(U k, T theta, const Policy& pol);
922
923 template <class U, class T>
924 typename tools::promote_args<T, U>::type jacobi_sn(U k, T theta);
925
926 template <class T, class U, class Policy>
927 typename tools::promote_args<T, U>::type jacobi_cn(T k, U theta, const Policy& pol);
928
929 template <class T, class U>
930 typename tools::promote_args<T, U>::type jacobi_cn(T k, U theta);
931
932 template <class T, class U, class Policy>
933 typename tools::promote_args<T, U>::type jacobi_dn(T k, U theta, const Policy& pol);
934
935 template <class T, class U>
936 typename tools::promote_args<T, U>::type jacobi_dn(T k, U theta);
937
938 template <class T, class U, class Policy>
939 typename tools::promote_args<T, U>::type jacobi_cd(T k, U theta, const Policy& pol);
940
941 template <class T, class U>
942 typename tools::promote_args<T, U>::type jacobi_cd(T k, U theta);
943
944 template <class T, class U, class Policy>
945 typename tools::promote_args<T, U>::type jacobi_dc(T k, U theta, const Policy& pol);
946
947 template <class T, class U>
948 typename tools::promote_args<T, U>::type jacobi_dc(T k, U theta);
949
950 template <class T, class U, class Policy>
951 typename tools::promote_args<T, U>::type jacobi_ns(T k, U theta, const Policy& pol);
952
953 template <class T, class U>
954 typename tools::promote_args<T, U>::type jacobi_ns(T k, U theta);
955
956 template <class T, class U, class Policy>
957 typename tools::promote_args<T, U>::type jacobi_sd(T k, U theta, const Policy& pol);
958
959 template <class T, class U>
960 typename tools::promote_args<T, U>::type jacobi_sd(T k, U theta);
961
962 template <class T, class U, class Policy>
963 typename tools::promote_args<T, U>::type jacobi_ds(T k, U theta, const Policy& pol);
964
965 template <class T, class U>
966 typename tools::promote_args<T, U>::type jacobi_ds(T k, U theta);
967
968 template <class T, class U, class Policy>
969 typename tools::promote_args<T, U>::type jacobi_nc(T k, U theta, const Policy& pol);
970
971 template <class T, class U>
972 typename tools::promote_args<T, U>::type jacobi_nc(T k, U theta);
973
974 template <class T, class U, class Policy>
975 typename tools::promote_args<T, U>::type jacobi_nd(T k, U theta, const Policy& pol);
976
977 template <class T, class U>
978 typename tools::promote_args<T, U>::type jacobi_nd(T k, U theta);
979
980 template <class T, class U, class Policy>
981 typename tools::promote_args<T, U>::type jacobi_sc(T k, U theta, const Policy& pol);
982
983 template <class T, class U>
984 typename tools::promote_args<T, U>::type jacobi_sc(T k, U theta);
985
986 template <class T, class U, class Policy>
987 typename tools::promote_args<T, U>::type jacobi_cs(T k, U theta, const Policy& pol);
988
989 template <class T, class U>
990 typename tools::promote_args<T, U>::type jacobi_cs(T k, U theta);
991
992
993 template <class T>
994 typename tools::promote_args<T>::type zeta(T s);
995
996 // pow:
997 template <int N, typename T, class Policy>
998 typename tools::promote_args<T>::type pow(T base, const Policy& policy);
999
1000 template <int N, typename T>
1001 typename tools::promote_args<T>::type pow(T base);
1002
1003 // next:
1004 template <class T, class U, class Policy>
1005 typename tools::promote_args<T, U>::type nextafter(const T&, const U&, const Policy&);
1006 template <class T, class U>
1007 typename tools::promote_args<T, U>::type nextafter(const T&, const U&);
1008 template <class T, class Policy>
1009 typename tools::promote_args<T>::type float_next(const T&, const Policy&);
1010 template <class T>
1011 typename tools::promote_args<T>::type float_next(const T&);
1012 template <class T, class Policy>
1013 typename tools::promote_args<T>::type float_prior(const T&, const Policy&);
1014 template <class T>
1015 typename tools::promote_args<T>::type float_prior(const T&);
1016 template <class T, class U, class Policy>
1017 typename tools::promote_args<T, U>::type float_distance(const T&, const U&, const Policy&);
1018 template <class T, class U>
1019 typename tools::promote_args<T, U>::type float_distance(const T&, const U&);
1020 template <class T, class Policy>
1021 typename tools::promote_args<T>::type float_advance(T val, int distance, const Policy& pol);
1022 template <class T>
1023 typename tools::promote_args<T>::type float_advance(const T& val, int distance);
1024
1025 template <class T, class Policy>
1026 typename tools::promote_args<T>::type ulp(const T& val, const Policy& pol);
1027 template <class T>
1028 typename tools::promote_args<T>::type ulp(const T& val);
1029
1030 template <class T, class U>
1031 typename tools::promote_args<T, U>::type relative_difference(const T&, const U&);
1032 template <class T, class U>
1033 typename tools::promote_args<T, U>::type epsilon_difference(const T&, const U&);
1034
1035 template<class T>
1036 T unchecked_bernoulli_b2n(const std::size_t n);
1037 template <class T, class Policy>
1038 T bernoulli_b2n(const int i, const Policy &pol);
1039 template <class T>
1040 T bernoulli_b2n(const int i);
1041 template <class T, class OutputIterator, class Policy>
1042 OutputIterator bernoulli_b2n(const int start_index,
1043 const unsigned number_of_bernoullis_b2n,
1044 OutputIterator out_it,
1045 const Policy& pol);
1046 template <class T, class OutputIterator>
1047 OutputIterator bernoulli_b2n(const int start_index,
1048 const unsigned number_of_bernoullis_b2n,
1049 OutputIterator out_it);
1050 template <class T, class Policy>
1051 T tangent_t2n(const int i, const Policy &pol);
1052 template <class T>
1053 T tangent_t2n(const int i);
1054 template <class T, class OutputIterator, class Policy>
1055 OutputIterator tangent_t2n(const int start_index,
1056 const unsigned number_of_bernoullis_b2n,
1057 OutputIterator out_it,
1058 const Policy& pol);
1059 template <class T, class OutputIterator>
1060 OutputIterator tangent_t2n(const int start_index,
1061 const unsigned number_of_bernoullis_b2n,
1062 OutputIterator out_it);
1063
1064 } // namespace math
1065} // namespace boost
1066
1067#ifdef BOOST_HAS_LONG_LONG
1068#define BOOST_MATH_DETAIL_LL_FUNC(Policy)\
1069 \
1070 template <class T>\
1071 inline T modf(const T& v, boost::long_long_type* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\
1072 \
1073 template <class T>\
1074 inline boost::long_long_type lltrunc(const T& v){ using boost::math::lltrunc; return lltrunc(v, Policy()); }\
1075 \
1076 template <class T>\
1077 inline boost::long_long_type llround(const T& v){ using boost::math::llround; return llround(v, Policy()); }\
1078
1079#else
1080#define BOOST_MATH_DETAIL_LL_FUNC(Policy)
1081#endif
1082
1083#define BOOST_MATH_DECLARE_SPECIAL_FUNCTIONS(Policy)\
1084 \
1085 BOOST_MATH_DETAIL_LL_FUNC(Policy)\
1086 \
1087 template <class RT1, class RT2>\
1088 inline typename boost::math::tools::promote_args<RT1, RT2>::type \
1089 beta(RT1 a, RT2 b) { return ::boost::math::beta(a, b, Policy()); }\
1090\
1091 template <class RT1, class RT2, class A>\
1092 inline typename boost::math::tools::promote_args<RT1, RT2, A>::type \
1093 beta(RT1 a, RT2 b, A x){ return ::boost::math::beta(a, b, x, Policy()); }\
1094\
1095 template <class RT1, class RT2, class RT3>\
1096 inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \
1097 betac(RT1 a, RT2 b, RT3 x) { return ::boost::math::betac(a, b, x, Policy()); }\
1098\
1099 template <class RT1, class RT2, class RT3>\
1100 inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \
1101 ibeta(RT1 a, RT2 b, RT3 x){ return ::boost::math::ibeta(a, b, x, Policy()); }\
1102\
1103 template <class RT1, class RT2, class RT3>\
1104 inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \
1105 ibetac(RT1 a, RT2 b, RT3 x){ return ::boost::math::ibetac(a, b, x, Policy()); }\
1106\
1107 template <class T1, class T2, class T3, class T4>\
1108 inline typename boost::math::tools::promote_args<T1, T2, T3, T4>::type \
1109 ibeta_inv(T1 a, T2 b, T3 p, T4* py){ return ::boost::math::ibeta_inv(a, b, p, py, Policy()); }\
1110\
1111 template <class RT1, class RT2, class RT3>\
1112 inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \
1113 ibeta_inv(RT1 a, RT2 b, RT3 p){ return ::boost::math::ibeta_inv(a, b, p, Policy()); }\
1114\
1115 template <class T1, class T2, class T3, class T4>\
1116 inline typename boost::math::tools::promote_args<T1, T2, T3, T4>::type \
1117 ibetac_inv(T1 a, T2 b, T3 q, T4* py){ return ::boost::math::ibetac_inv(a, b, q, py, Policy()); }\
1118\
1119 template <class RT1, class RT2, class RT3>\
1120 inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \
1121 ibeta_inva(RT1 a, RT2 b, RT3 p){ return ::boost::math::ibeta_inva(a, b, p, Policy()); }\
1122\
1123 template <class T1, class T2, class T3>\
1124 inline typename boost::math::tools::promote_args<T1, T2, T3>::type \
1125 ibetac_inva(T1 a, T2 b, T3 q){ return ::boost::math::ibetac_inva(a, b, q, Policy()); }\
1126\
1127 template <class RT1, class RT2, class RT3>\
1128 inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \
1129 ibeta_invb(RT1 a, RT2 b, RT3 p){ return ::boost::math::ibeta_invb(a, b, p, Policy()); }\
1130\
1131 template <class T1, class T2, class T3>\
1132 inline typename boost::math::tools::promote_args<T1, T2, T3>::type \
1133 ibetac_invb(T1 a, T2 b, T3 q){ return ::boost::math::ibetac_invb(a, b, q, Policy()); }\
1134\
1135 template <class RT1, class RT2, class RT3>\
1136 inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \
1137 ibetac_inv(RT1 a, RT2 b, RT3 q){ return ::boost::math::ibetac_inv(a, b, q, Policy()); }\
1138\
1139 template <class RT1, class RT2, class RT3>\
1140 inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \
1141 ibeta_derivative(RT1 a, RT2 b, RT3 x){ return ::boost::math::ibeta_derivative(a, b, x, Policy()); }\
1142\
1143 template <class T> T binomial_coefficient(unsigned n, unsigned k){ return ::boost::math::binomial_coefficient<T, Policy>(n, k, Policy()); }\
1144\
1145 template <class RT>\
1146 inline typename boost::math::tools::promote_args<RT>::type erf(RT z) { return ::boost::math::erf(z, Policy()); }\
1147\
1148 template <class RT>\
1149 inline typename boost::math::tools::promote_args<RT>::type erfc(RT z){ return ::boost::math::erfc(z, Policy()); }\
1150\
1151 template <class RT>\
1152 inline typename boost::math::tools::promote_args<RT>::type erf_inv(RT z) { return ::boost::math::erf_inv(z, Policy()); }\
1153\
1154 template <class RT>\
1155 inline typename boost::math::tools::promote_args<RT>::type erfc_inv(RT z){ return ::boost::math::erfc_inv(z, Policy()); }\
1156\
1157 using boost::math::legendre_next;\
1158\
1159 template <class T>\
1160 inline typename boost::math::tools::promote_args<T>::type \
1161 legendre_p(int l, T x){ return ::boost::math::legendre_p(l, x, Policy()); }\
1162\
1163 template <class T>\
1164 inline typename boost::math::tools::promote_args<T>::type \
1165 legendre_p_prime(int l, T x){ return ::boost::math::legendre_p(l, x, Policy()); }\
1166\
1167 template <class T>\
1168 inline typename boost::math::tools::promote_args<T>::type \
1169 legendre_q(unsigned l, T x){ return ::boost::math::legendre_q(l, x, Policy()); }\
1170\
1171 using ::boost::math::legendre_next;\
1172\
1173 template <class T>\
1174 inline typename boost::math::tools::promote_args<T>::type \
1175 legendre_p(int l, int m, T x){ return ::boost::math::legendre_p(l, m, x, Policy()); }\
1176\
1177 using ::boost::math::laguerre_next;\
1178\
1179 template <class T>\
1180 inline typename boost::math::tools::promote_args<T>::type \
1181 laguerre(unsigned n, T x){ return ::boost::math::laguerre(n, x, Policy()); }\
1182\
1183 template <class T1, class T2>\
1184 inline typename boost::math::laguerre_result<T1, T2>::type \
1185 laguerre(unsigned n, T1 m, T2 x) { return ::boost::math::laguerre(n, m, x, Policy()); }\
1186\
1187 template <class T>\
1188 inline typename boost::math::tools::promote_args<T>::type \
1189 hermite(unsigned n, T x){ return ::boost::math::hermite(n, x, Policy()); }\
1190\
1191 using boost::math::hermite_next;\
1192\
1193 template <class T1, class T2>\
1194 inline std::complex<typename boost::math::tools::promote_args<T1, T2>::type> \
1195 spherical_harmonic(unsigned n, int m, T1 theta, T2 phi){ return boost::math::spherical_harmonic(n, m, theta, phi, Policy()); }\
1196\
1197 template <class T1, class T2>\
1198 inline typename boost::math::tools::promote_args<T1, T2>::type \
1199 spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi){ return ::boost::math::spherical_harmonic_r(n, m, theta, phi, Policy()); }\
1200\
1201 template <class T1, class T2>\
1202 inline typename boost::math::tools::promote_args<T1, T2>::type \
1203 spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi){ return boost::math::spherical_harmonic_i(n, m, theta, phi, Policy()); }\
1204\
1205 template <class T1, class T2, class Policy>\
1206 inline typename boost::math::tools::promote_args<T1, T2>::type \
1207 spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);\
1208\
1209 template <class T1, class T2, class T3>\
1210 inline typename boost::math::tools::promote_args<T1, T2, T3>::type \
1211 ellint_rf(T1 x, T2 y, T3 z){ return ::boost::math::ellint_rf(x, y, z, Policy()); }\
1212\
1213 template <class T1, class T2, class T3>\
1214 inline typename boost::math::tools::promote_args<T1, T2, T3>::type \
1215 ellint_rd(T1 x, T2 y, T3 z){ return ::boost::math::ellint_rd(x, y, z, Policy()); }\
1216\
1217 template <class T1, class T2>\
1218 inline typename boost::math::tools::promote_args<T1, T2>::type \
1219 ellint_rc(T1 x, T2 y){ return ::boost::math::ellint_rc(x, y, Policy()); }\
1220\
1221 template <class T1, class T2, class T3, class T4>\
1222 inline typename boost::math::tools::promote_args<T1, T2, T3, T4>::type \
1223 ellint_rj(T1 x, T2 y, T3 z, T4 p){ return boost::math::ellint_rj(x, y, z, p, Policy()); }\
1224\
1225 template <class T1, class T2, class T3>\
1226 inline typename boost::math::tools::promote_args<T1, T2, T3>::type \
1227 ellint_rg(T1 x, T2 y, T3 z){ return ::boost::math::ellint_rg(x, y, z, Policy()); }\
1228 \
1229 template <typename T>\
1230 inline typename boost::math::tools::promote_args<T>::type ellint_2(T k){ return boost::math::ellint_2(k, Policy()); }\
1231\
1232 template <class T1, class T2>\
1233 inline typename boost::math::tools::promote_args<T1, T2>::type ellint_2(T1 k, T2 phi){ return boost::math::ellint_2(k, phi, Policy()); }\
1234\
1235 template <typename T>\
1236 inline typename boost::math::tools::promote_args<T>::type ellint_d(T k){ return boost::math::ellint_d(k, Policy()); }\
1237\
1238 template <class T1, class T2>\
1239 inline typename boost::math::tools::promote_args<T1, T2>::type ellint_d(T1 k, T2 phi){ return boost::math::ellint_d(k, phi, Policy()); }\
1240\
1241 template <class T1, class T2>\
1242 inline typename boost::math::tools::promote_args<T1, T2>::type jacobi_zeta(T1 k, T2 phi){ return boost::math::jacobi_zeta(k, phi, Policy()); }\
1243\
1244 template <class T1, class T2>\
1245 inline typename boost::math::tools::promote_args<T1, T2>::type heuman_lambda(T1 k, T2 phi){ return boost::math::heuman_lambda(k, phi, Policy()); }\
1246\
1247 template <typename T>\
1248 inline typename boost::math::tools::promote_args<T>::type ellint_1(T k){ return boost::math::ellint_1(k, Policy()); }\
1249\
1250 template <class T1, class T2>\
1251 inline typename boost::math::tools::promote_args<T1, T2>::type ellint_1(T1 k, T2 phi){ return boost::math::ellint_1(k, phi, Policy()); }\
1252\
1253 template <class T1, class T2, class T3>\
1254 inline typename boost::math::tools::promote_args<T1, T2, T3>::type ellint_3(T1 k, T2 v, T3 phi){ return boost::math::ellint_3(k, v, phi, Policy()); }\
1255\
1256 template <class T1, class T2>\
1257 inline typename boost::math::tools::promote_args<T1, T2>::type ellint_3(T1 k, T2 v){ return boost::math::ellint_3(k, v, Policy()); }\
1258\
1259 using boost::math::max_factorial;\
1260 template <class RT>\
1261 inline RT factorial(unsigned int i) { return boost::math::factorial<RT>(i, Policy()); }\
1262 using boost::math::unchecked_factorial;\
1263 template <class RT>\
1264 inline RT double_factorial(unsigned i){ return boost::math::double_factorial<RT>(i, Policy()); }\
1265 template <class RT>\
1266 inline typename boost::math::tools::promote_args<RT>::type falling_factorial(RT x, unsigned n){ return boost::math::falling_factorial(x, n, Policy()); }\
1267 template <class RT>\
1268 inline typename boost::math::tools::promote_args<RT>::type rising_factorial(RT x, unsigned n){ return boost::math::rising_factorial(x, n, Policy()); }\
1269\
1270 template <class RT>\
1271 inline typename boost::math::tools::promote_args<RT>::type tgamma(RT z){ return boost::math::tgamma(z, Policy()); }\
1272\
1273 template <class RT>\
1274 inline typename boost::math::tools::promote_args<RT>::type tgamma1pm1(RT z){ return boost::math::tgamma1pm1(z, Policy()); }\
1275\
1276 template <class RT1, class RT2>\
1277 inline typename boost::math::tools::promote_args<RT1, RT2>::type tgamma(RT1 a, RT2 z){ return boost::math::tgamma(a, z, Policy()); }\
1278\
1279 template <class RT>\
1280 inline typename boost::math::tools::promote_args<RT>::type lgamma(RT z, int* sign){ return boost::math::lgamma(z, sign, Policy()); }\
1281\
1282 template <class RT>\
1283 inline typename boost::math::tools::promote_args<RT>::type lgamma(RT x){ return boost::math::lgamma(x, Policy()); }\
1284\
1285 template <class RT1, class RT2>\
1286 inline typename boost::math::tools::promote_args<RT1, RT2>::type tgamma_lower(RT1 a, RT2 z){ return boost::math::tgamma_lower(a, z, Policy()); }\
1287\
1288 template <class RT1, class RT2>\
1289 inline typename boost::math::tools::promote_args<RT1, RT2>::type gamma_q(RT1 a, RT2 z){ return boost::math::gamma_q(a, z, Policy()); }\
1290\
1291 template <class RT1, class RT2>\
1292 inline typename boost::math::tools::promote_args<RT1, RT2>::type gamma_p(RT1 a, RT2 z){ return boost::math::gamma_p(a, z, Policy()); }\
1293\
1294 template <class T1, class T2>\
1295 inline typename boost::math::tools::promote_args<T1, T2>::type tgamma_delta_ratio(T1 z, T2 delta){ return boost::math::tgamma_delta_ratio(z, delta, Policy()); }\
1296\
1297 template <class T1, class T2>\
1298 inline typename boost::math::tools::promote_args<T1, T2>::type tgamma_ratio(T1 a, T2 b) { return boost::math::tgamma_ratio(a, b, Policy()); }\
1299\
1300 template <class T1, class T2>\
1301 inline typename boost::math::tools::promote_args<T1, T2>::type gamma_p_derivative(T1 a, T2 x){ return boost::math::gamma_p_derivative(a, x, Policy()); }\
1302\
1303 template <class T1, class T2>\
1304 inline typename boost::math::tools::promote_args<T1, T2>::type gamma_p_inv(T1 a, T2 p){ return boost::math::gamma_p_inv(a, p, Policy()); }\
1305\
1306 template <class T1, class T2>\
1307 inline typename boost::math::tools::promote_args<T1, T2>::type gamma_p_inva(T1 a, T2 p){ return boost::math::gamma_p_inva(a, p, Policy()); }\
1308\
1309 template <class T1, class T2>\
1310 inline typename boost::math::tools::promote_args<T1, T2>::type gamma_q_inv(T1 a, T2 q){ return boost::math::gamma_q_inv(a, q, Policy()); }\
1311\
1312 template <class T1, class T2>\
1313 inline typename boost::math::tools::promote_args<T1, T2>::type gamma_q_inva(T1 a, T2 q){ return boost::math::gamma_q_inva(a, q, Policy()); }\
1314\
1315 template <class T>\
1316 inline typename boost::math::tools::promote_args<T>::type digamma(T x){ return boost::math::digamma(x, Policy()); }\
1317\
1318 template <class T>\
1319 inline typename boost::math::tools::promote_args<T>::type trigamma(T x){ return boost::math::trigamma(x, Policy()); }\
1320\
1321 template <class T>\
1322 inline typename boost::math::tools::promote_args<T>::type polygamma(int n, T x){ return boost::math::polygamma(n, x, Policy()); }\
1323 \
1324 template <class T1, class T2>\
1325 inline typename boost::math::tools::promote_args<T1, T2>::type \
1326 hypot(T1 x, T2 y){ return boost::math::hypot(x, y, Policy()); }\
1327\
1328 template <class RT>\
1329 inline typename boost::math::tools::promote_args<RT>::type cbrt(RT z){ return boost::math::cbrt(z, Policy()); }\
1330\
1331 template <class T>\
1332 inline typename boost::math::tools::promote_args<T>::type log1p(T x){ return boost::math::log1p(x, Policy()); }\
1333\
1334 template <class T>\
1335 inline typename boost::math::tools::promote_args<T>::type log1pmx(T x){ return boost::math::log1pmx(x, Policy()); }\
1336\
1337 template <class T>\
1338 inline typename boost::math::tools::promote_args<T>::type expm1(T x){ return boost::math::expm1(x, Policy()); }\
1339\
1340 template <class T1, class T2>\
1341 inline typename boost::math::tools::promote_args<T1, T2>::type \
1342 powm1(const T1 a, const T2 z){ return boost::math::powm1(a, z, Policy()); }\
1343\
1344 template <class T>\
1345 inline typename boost::math::tools::promote_args<T>::type sqrt1pm1(const T& val){ return boost::math::sqrt1pm1(val, Policy()); }\
1346\
1347 template <class T>\
1348 inline typename boost::math::tools::promote_args<T>::type sinc_pi(T x){ return boost::math::sinc_pi(x, Policy()); }\
1349\
1350 template <class T>\
1351 inline typename boost::math::tools::promote_args<T>::type sinhc_pi(T x){ return boost::math::sinhc_pi(x, Policy()); }\
1352\
1353 template<typename T>\
1354 inline typename boost::math::tools::promote_args<T>::type asinh(const T x){ return boost::math::asinh(x, Policy()); }\
1355\
1356 template<typename T>\
1357 inline typename boost::math::tools::promote_args<T>::type acosh(const T x){ return boost::math::acosh(x, Policy()); }\
1358\
1359 template<typename T>\
1360 inline typename boost::math::tools::promote_args<T>::type atanh(const T x){ return boost::math::atanh(x, Policy()); }\
1361\
1362 template <class T1, class T2>\
1363 inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type cyl_bessel_j(T1 v, T2 x)\
1364 { return boost::math::cyl_bessel_j(v, x, Policy()); }\
1365\
1366 template <class T1, class T2>\
1367 inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type cyl_bessel_j_prime(T1 v, T2 x)\
1368 { return boost::math::cyl_bessel_j_prime(v, x, Policy()); }\
1369\
1370 template <class T>\
1371 inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type sph_bessel(unsigned v, T x)\
1372 { return boost::math::sph_bessel(v, x, Policy()); }\
1373\
1374 template <class T>\
1375 inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type sph_bessel_prime(unsigned v, T x)\
1376 { return boost::math::sph_bessel_prime(v, x, Policy()); }\
1377\
1378 template <class T1, class T2>\
1379 inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
1380 cyl_bessel_i(T1 v, T2 x) { return boost::math::cyl_bessel_i(v, x, Policy()); }\
1381\
1382 template <class T1, class T2>\
1383 inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
1384 cyl_bessel_i_prime(T1 v, T2 x) { return boost::math::cyl_bessel_i_prime(v, x, Policy()); }\
1385\
1386 template <class T1, class T2>\
1387 inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
1388 cyl_bessel_k(T1 v, T2 x) { return boost::math::cyl_bessel_k(v, x, Policy()); }\
1389\
1390 template <class T1, class T2>\
1391 inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
1392 cyl_bessel_k_prime(T1 v, T2 x) { return boost::math::cyl_bessel_k_prime(v, x, Policy()); }\
1393\
1394 template <class T1, class T2>\
1395 inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
1396 cyl_neumann(T1 v, T2 x){ return boost::math::cyl_neumann(v, x, Policy()); }\
1397\
1398 template <class T1, class T2>\
1399 inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
1400 cyl_neumann_prime(T1 v, T2 x){ return boost::math::cyl_neumann_prime(v, x, Policy()); }\
1401\
1402 template <class T>\
1403 inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type \
1404 sph_neumann(unsigned v, T x){ return boost::math::sph_neumann(v, x, Policy()); }\
1405\
1406 template <class T>\
1407 inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type \
1408 sph_neumann_prime(unsigned v, T x){ return boost::math::sph_neumann_prime(v, x, Policy()); }\
1409\
1410 template <class T>\
1411 inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type cyl_bessel_j_zero(T v, int m)\
1412 { return boost::math::cyl_bessel_j_zero(v, m, Policy()); }\
1413\
1414template <class OutputIterator, class T>\
1415 inline void cyl_bessel_j_zero(T v,\
1416 int start_index,\
1417 unsigned number_of_zeros,\
1418 OutputIterator out_it)\
1419 { boost::math::cyl_bessel_j_zero(v, start_index, number_of_zeros, out_it, Policy()); }\
1420\
1421 template <class T>\
1422 inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type cyl_neumann_zero(T v, int m)\
1423 { return boost::math::cyl_neumann_zero(v, m, Policy()); }\
1424\
1425template <class OutputIterator, class T>\
1426 inline void cyl_neumann_zero(T v,\
1427 int start_index,\
1428 unsigned number_of_zeros,\
1429 OutputIterator out_it)\
1430 { boost::math::cyl_neumann_zero(v, start_index, number_of_zeros, out_it, Policy()); }\
1431\
1432 template <class T>\
1433 inline typename boost::math::tools::promote_args<T>::type sin_pi(T x){ return boost::math::sin_pi(x); }\
1434\
1435 template <class T>\
1436 inline typename boost::math::tools::promote_args<T>::type cos_pi(T x){ return boost::math::cos_pi(x); }\
1437\
1438 using boost::math::fpclassify;\
1439 using boost::math::isfinite;\
1440 using boost::math::isinf;\
1441 using boost::math::isnan;\
1442 using boost::math::isnormal;\
1443 using boost::math::signbit;\
1444 using boost::math::sign;\
1445 using boost::math::copysign;\
1446 using boost::math::changesign;\
1447 \
1448 template <class T, class U>\
1449 inline typename boost::math::tools::promote_args<T,U>::type expint(T const& z, U const& u)\
1450 { return boost::math::expint(z, u, Policy()); }\
1451 \
1452 template <class T>\
1453 inline typename boost::math::tools::promote_args<T>::type expint(T z){ return boost::math::expint(z, Policy()); }\
1454 \
1455 template <class T>\
1456 inline typename boost::math::tools::promote_args<T>::type zeta(T s){ return boost::math::zeta(s, Policy()); }\
1457 \
1458 template <class T>\
1459 inline T round(const T& v){ using boost::math::round; return round(v, Policy()); }\
1460 \
1461 template <class T>\
1462 inline int iround(const T& v){ using boost::math::iround; return iround(v, Policy()); }\
1463 \
1464 template <class T>\
1465 inline long lround(const T& v){ using boost::math::lround; return lround(v, Policy()); }\
1466 \
1467 template <class T>\
1468 inline T trunc(const T& v){ using boost::math::trunc; return trunc(v, Policy()); }\
1469 \
1470 template <class T>\
1471 inline int itrunc(const T& v){ using boost::math::itrunc; return itrunc(v, Policy()); }\
1472 \
1473 template <class T>\
1474 inline long ltrunc(const T& v){ using boost::math::ltrunc; return ltrunc(v, Policy()); }\
1475 \
1476 template <class T>\
1477 inline T modf(const T& v, T* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\
1478 \
1479 template <class T>\
1480 inline T modf(const T& v, int* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\
1481 \
1482 template <class T>\
1483 inline T modf(const T& v, long* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\
1484 \
1485 template <int N, class T>\
1486 inline typename boost::math::tools::promote_args<T>::type pow(T v){ return boost::math::pow<N>(v, Policy()); }\
1487 \
1488 template <class T> T nextafter(const T& a, const T& b){ return boost::math::nextafter(a, b, Policy()); }\
1489 template <class T> T float_next(const T& a){ return boost::math::float_next(a, Policy()); }\
1490 template <class T> T float_prior(const T& a){ return boost::math::float_prior(a, Policy()); }\
1491 template <class T> T float_distance(const T& a, const T& b){ return boost::math::float_distance(a, b, Policy()); }\
1492 template <class T> T ulp(const T& a){ return boost::math::ulp(a, Policy()); }\
1493 \
1494 template <class RT1, class RT2>\
1495 inline typename boost::math::tools::promote_args<RT1, RT2>::type owens_t(RT1 a, RT2 z){ return boost::math::owens_t(a, z, Policy()); }\
1496 \
1497 template <class T1, class T2>\
1498 inline std::complex<typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type> cyl_hankel_1(T1 v, T2 x)\
1499 { return boost::math::cyl_hankel_1(v, x, Policy()); }\
1500 \
1501 template <class T1, class T2>\
1502 inline std::complex<typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type> cyl_hankel_2(T1 v, T2 x)\
1503 { return boost::math::cyl_hankel_2(v, x, Policy()); }\
1504 \
1505 template <class T1, class T2>\
1506 inline std::complex<typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type> sph_hankel_1(T1 v, T2 x)\
1507 { return boost::math::sph_hankel_1(v, x, Policy()); }\
1508 \
1509 template <class T1, class T2>\
1510 inline std::complex<typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type> sph_hankel_2(T1 v, T2 x)\
1511 { return boost::math::sph_hankel_2(v, x, Policy()); }\
1512 \
1513 template <class T>\
1514 inline typename boost::math::tools::promote_args<T>::type jacobi_elliptic(T k, T theta, T* pcn, T* pdn)\
1515 { return boost::math::jacobi_elliptic(k, theta, pcn, pdn, Policy()); }\
1516 \
1517 template <class U, class T>\
1518 inline typename boost::math::tools::promote_args<T, U>::type jacobi_sn(U k, T theta)\
1519 { return boost::math::jacobi_sn(k, theta, Policy()); }\
1520 \
1521 template <class T, class U>\
1522 inline typename boost::math::tools::promote_args<T, U>::type jacobi_cn(T k, U theta)\
1523 { return boost::math::jacobi_cn(k, theta, Policy()); }\
1524 \
1525 template <class T, class U>\
1526 inline typename boost::math::tools::promote_args<T, U>::type jacobi_dn(T k, U theta)\
1527 { return boost::math::jacobi_dn(k, theta, Policy()); }\
1528 \
1529 template <class T, class U>\
1530 inline typename boost::math::tools::promote_args<T, U>::type jacobi_cd(T k, U theta)\
1531 { return boost::math::jacobi_cd(k, theta, Policy()); }\
1532 \
1533 template <class T, class U>\
1534 inline typename boost::math::tools::promote_args<T, U>::type jacobi_dc(T k, U theta)\
1535 { return boost::math::jacobi_dc(k, theta, Policy()); }\
1536 \
1537 template <class T, class U>\
1538 inline typename boost::math::tools::promote_args<T, U>::type jacobi_ns(T k, U theta)\
1539 { return boost::math::jacobi_ns(k, theta, Policy()); }\
1540 \
1541 template <class T, class U>\
1542 inline typename boost::math::tools::promote_args<T, U>::type jacobi_sd(T k, U theta)\
1543 { return boost::math::jacobi_sd(k, theta, Policy()); }\
1544 \
1545 template <class T, class U>\
1546 inline typename boost::math::tools::promote_args<T, U>::type jacobi_ds(T k, U theta)\
1547 { return boost::math::jacobi_ds(k, theta, Policy()); }\
1548 \
1549 template <class T, class U>\
1550 inline typename boost::math::tools::promote_args<T, U>::type jacobi_nc(T k, U theta)\
1551 { return boost::math::jacobi_nc(k, theta, Policy()); }\
1552 \
1553 template <class T, class U>\
1554 inline typename boost::math::tools::promote_args<T, U>::type jacobi_nd(T k, U theta)\
1555 { return boost::math::jacobi_nd(k, theta, Policy()); }\
1556 \
1557 template <class T, class U>\
1558 inline typename boost::math::tools::promote_args<T, U>::type jacobi_sc(T k, U theta)\
1559 { return boost::math::jacobi_sc(k, theta, Policy()); }\
1560 \
1561 template <class T, class U>\
1562 inline typename boost::math::tools::promote_args<T, U>::type jacobi_cs(T k, U theta)\
1563 { return boost::math::jacobi_cs(k, theta, Policy()); }\
1564 \
1565 template <class T>\
1566 inline typename boost::math::tools::promote_args<T>::type airy_ai(T x)\
1567 { return boost::math::airy_ai(x, Policy()); }\
1568 \
1569 template <class T>\
1570 inline typename boost::math::tools::promote_args<T>::type airy_bi(T x)\
1571 { return boost::math::airy_bi(x, Policy()); }\
1572 \
1573 template <class T>\
1574 inline typename boost::math::tools::promote_args<T>::type airy_ai_prime(T x)\
1575 { return boost::math::airy_ai_prime(x, Policy()); }\
1576 \
1577 template <class T>\
1578 inline typename boost::math::tools::promote_args<T>::type airy_bi_prime(T x)\
1579 { return boost::math::airy_bi_prime(x, Policy()); }\
1580 \
1581 template <class T>\
1582 inline T airy_ai_zero(int m)\
1583 { return boost::math::airy_ai_zero<T>(m, Policy()); }\
1584 template <class T, class OutputIterator>\
1585 OutputIterator airy_ai_zero(int start_index, unsigned number_of_zeros, OutputIterator out_it)\
1586 { return boost::math::airy_ai_zero<T>(start_index, number_of_zeros, out_it, Policy()); }\
1587 \
1588 template <class T>\
1589 inline T airy_bi_zero(int m)\
1590 { return boost::math::airy_bi_zero<T>(m, Policy()); }\
1591 template <class T, class OutputIterator>\
1592 OutputIterator airy_bi_zero(int start_index, unsigned number_of_zeros, OutputIterator out_it)\
1593 { return boost::math::airy_bi_zero<T>(start_index, number_of_zeros, out_it, Policy()); }\
1594 \
1595 template <class T>\
1596 T bernoulli_b2n(const int i)\
1597 { return boost::math::bernoulli_b2n<T>(i, Policy()); }\
1598 template <class T, class OutputIterator>\
1599 OutputIterator bernoulli_b2n(int start_index, unsigned number_of_bernoullis_b2n, OutputIterator out_it)\
1600 { return boost::math::bernoulli_b2n<T>(start_index, number_of_bernoullis_b2n, out_it, Policy()); }\
1601 \
1602 template <class T>\
1603 T tangent_t2n(const int i)\
1604 { return boost::math::tangent_t2n<T>(i, Policy()); }\
1605 template <class T, class OutputIterator>\
1606 OutputIterator tangent_t2n(int start_index, unsigned number_of_bernoullis_b2n, OutputIterator out_it)\
1607 { return boost::math::tangent_t2n<T>(start_index, number_of_bernoullis_b2n, out_it, Policy()); }\
1608 \
1609
1610
1611
1612
1613
1614#endif // BOOST_MATH_SPECIAL_MATH_FWD_HPP
1615