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