1 // Copyright John Maddock 2008.
2 // Use, modification and distribution are subject to the
3 // Boost Software License, Version 1.0.
4 // (See accompanying file LICENSE_1_0.txt
5 // or copy at http://www.boost.org/LICENSE_1_0.txt)
7 #ifndef BOOST_MATH_TR1_HPP
8 #define BOOST_MATH_TR1_HPP
16 #include <boost/config.hpp>
17 #include <boost/static_assert.hpp>
19 namespace boost
{ namespace math
{ namespace tr1
{ extern "C"{
23 #ifdef BOOST_HAS_DECLSPEC // defined in config system
24 // we need to import/export our code only if the user has specifically
25 // asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
26 // libraries to be dynamically linked, or BOOST_MATH_TR1_DYN_LINK
27 // if they want just this one to be dynamically liked:
28 #if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_MATH_TR1_DYN_LINK)
29 // export if this is our own source, otherwise import:
30 #ifdef BOOST_MATH_TR1_SOURCE
31 # define BOOST_MATH_TR1_DECL __declspec(dllexport)
33 # define BOOST_MATH_TR1_DECL __declspec(dllimport)
34 #endif // BOOST_MATH_TR1_SOURCE
36 #endif // BOOST_HAS_DECLSPEC
38 // if BOOST_MATH_TR1_DECL isn't defined yet define it now:
39 #ifndef BOOST_MATH_TR1_DECL
40 #define BOOST_MATH_TR1_DECL
44 // Now set up the libraries to link against:
46 #if !defined(BOOST_MATH_TR1_NO_LIB) && !defined(BOOST_MATH_TR1_SOURCE) \
47 && !defined(BOOST_ALL_NO_LIB) && defined(__cplusplus)
48 # define BOOST_LIB_NAME boost_math_c99
49 # if defined(BOOST_MATH_TR1_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
50 # define BOOST_DYN_LINK
52 # include <boost/config/auto_link.hpp>
54 #if !defined(BOOST_MATH_TR1_NO_LIB) && !defined(BOOST_MATH_TR1_SOURCE) \
55 && !defined(BOOST_ALL_NO_LIB) && defined(__cplusplus)
56 # define BOOST_LIB_NAME boost_math_c99f
57 # if defined(BOOST_MATH_TR1_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
58 # define BOOST_DYN_LINK
60 # include <boost/config/auto_link.hpp>
62 #if !defined(BOOST_MATH_TR1_NO_LIB) && !defined(BOOST_MATH_TR1_SOURCE) \
63 && !defined(BOOST_ALL_NO_LIB) && defined(__cplusplus) \
64 && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
65 # define BOOST_LIB_NAME boost_math_c99l
66 # if defined(BOOST_MATH_TR1_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
67 # define BOOST_DYN_LINK
69 # include <boost/config/auto_link.hpp>
71 #if !defined(BOOST_MATH_TR1_NO_LIB) && !defined(BOOST_MATH_TR1_SOURCE) \
72 && !defined(BOOST_ALL_NO_LIB) && defined(__cplusplus)
73 # define BOOST_LIB_NAME boost_math_tr1
74 # if defined(BOOST_MATH_TR1_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
75 # define BOOST_DYN_LINK
77 # include <boost/config/auto_link.hpp>
79 #if !defined(BOOST_MATH_TR1_NO_LIB) && !defined(BOOST_MATH_TR1_SOURCE) \
80 && !defined(BOOST_ALL_NO_LIB) && defined(__cplusplus)
81 # define BOOST_LIB_NAME boost_math_tr1f
82 # if defined(BOOST_MATH_TR1_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
83 # define BOOST_DYN_LINK
85 # include <boost/config/auto_link.hpp>
87 #if !defined(BOOST_MATH_TR1_NO_LIB) && !defined(BOOST_MATH_TR1_SOURCE) \
88 && !defined(BOOST_ALL_NO_LIB) && defined(__cplusplus) \
89 && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
90 # define BOOST_LIB_NAME boost_math_tr1l
91 # if defined(BOOST_MATH_TR1_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
92 # define BOOST_DYN_LINK
94 # include <boost/config/auto_link.hpp>
97 #ifndef FLT_EVAL_METHOD
98 typedef float float_t
;
99 typedef double double_t
;
100 #elif FLT_EVAL_METHOD == 0
101 typedef float float_t
;
102 typedef double double_t
;
103 #elif FLT_EVAL_METHOD == 1
104 typedef double float_t
;
105 typedef double double_t
;
107 typedef long double float_t
;
108 typedef long double double_t
;
112 double BOOST_MATH_TR1_DECL acosh
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
113 float BOOST_MATH_TR1_DECL acoshf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
114 long double BOOST_MATH_TR1_DECL acoshl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
116 double BOOST_MATH_TR1_DECL asinh
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
117 float BOOST_MATH_TR1_DECL asinhf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
118 long double BOOST_MATH_TR1_DECL asinhl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
120 double BOOST_MATH_TR1_DECL atanh
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
121 float BOOST_MATH_TR1_DECL atanhf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
122 long double BOOST_MATH_TR1_DECL atanhl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
124 double BOOST_MATH_TR1_DECL cbrt
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
125 float BOOST_MATH_TR1_DECL cbrtf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
126 long double BOOST_MATH_TR1_DECL cbrtl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
128 double BOOST_MATH_TR1_DECL copysign
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
);
129 float BOOST_MATH_TR1_DECL copysignf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
);
130 long double BOOST_MATH_TR1_DECL copysignl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
);
132 double BOOST_MATH_TR1_DECL erf
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
133 float BOOST_MATH_TR1_DECL erff
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
134 long double BOOST_MATH_TR1_DECL erfl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
136 double BOOST_MATH_TR1_DECL erfc
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
137 float BOOST_MATH_TR1_DECL erfcf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
138 long double BOOST_MATH_TR1_DECL erfcl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
140 double BOOST_MATH_TR1_DECL exp2
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
141 float BOOST_MATH_TR1_DECL exp2f
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
142 long double BOOST_MATH_TR1_DECL exp2l
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
144 double BOOST_MATH_TR1_DECL boost_expm1
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
145 float BOOST_MATH_TR1_DECL boost_expm1f
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
146 long double BOOST_MATH_TR1_DECL boost_expm1l
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
148 double BOOST_MATH_TR1_DECL fdim
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
);
149 float BOOST_MATH_TR1_DECL fdimf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
);
150 long double BOOST_MATH_TR1_DECL fdiml
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
);
151 double BOOST_MATH_TR1_DECL fma
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
, double z
);
152 float BOOST_MATH_TR1_DECL fmaf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
, float z
);
153 long double BOOST_MATH_TR1_DECL fmal
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
, long double z
);
155 double BOOST_MATH_TR1_DECL fmax
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
);
156 float BOOST_MATH_TR1_DECL fmaxf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
);
157 long double BOOST_MATH_TR1_DECL fmaxl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
);
159 double BOOST_MATH_TR1_DECL fmin
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
);
160 float BOOST_MATH_TR1_DECL fminf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
);
161 long double BOOST_MATH_TR1_DECL fminl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
);
163 double BOOST_MATH_TR1_DECL hypot
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
);
164 float BOOST_MATH_TR1_DECL hypotf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
);
165 long double BOOST_MATH_TR1_DECL hypotl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
);
167 int BOOST_MATH_TR1_DECL ilogb
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
168 int BOOST_MATH_TR1_DECL ilogbf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
169 int BOOST_MATH_TR1_DECL ilogbl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
171 double BOOST_MATH_TR1_DECL lgamma
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
172 float BOOST_MATH_TR1_DECL lgammaf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
173 long double BOOST_MATH_TR1_DECL lgammal
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
174 #ifdef BOOST_HAS_LONG_LONG
176 ::boost::long_long_type BOOST_MATH_TR1_DECL llrint
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
177 ::boost::long_long_type BOOST_MATH_TR1_DECL llrintf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
178 ::boost::long_long_type BOOST_MATH_TR1_DECL llrintl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
180 ::boost::long_long_type BOOST_MATH_TR1_DECL llround
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
181 ::boost::long_long_type BOOST_MATH_TR1_DECL llroundf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
182 ::boost::long_long_type BOOST_MATH_TR1_DECL llroundl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
184 double BOOST_MATH_TR1_DECL boost_log1p
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
185 float BOOST_MATH_TR1_DECL boost_log1pf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
186 long double BOOST_MATH_TR1_DECL boost_log1pl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
188 double BOOST_MATH_TR1_DECL log2
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
189 float BOOST_MATH_TR1_DECL log2f
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
190 long double BOOST_MATH_TR1_DECL log2l
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
192 double BOOST_MATH_TR1_DECL logb
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
193 float BOOST_MATH_TR1_DECL logbf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
194 long double BOOST_MATH_TR1_DECL logbl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
195 long BOOST_MATH_TR1_DECL lrint
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
196 long BOOST_MATH_TR1_DECL lrintf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
197 long BOOST_MATH_TR1_DECL lrintl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
199 long BOOST_MATH_TR1_DECL lround
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
200 long BOOST_MATH_TR1_DECL lroundf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
201 long BOOST_MATH_TR1_DECL lroundl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
203 double BOOST_MATH_TR1_DECL nan
BOOST_PREVENT_MACRO_SUBSTITUTION(const char *str
);
204 float BOOST_MATH_TR1_DECL nanf
BOOST_PREVENT_MACRO_SUBSTITUTION(const char *str
);
205 long double BOOST_MATH_TR1_DECL nanl
BOOST_PREVENT_MACRO_SUBSTITUTION(const char *str
);
206 double BOOST_MATH_TR1_DECL nearbyint
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
207 float BOOST_MATH_TR1_DECL nearbyintf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
208 long double BOOST_MATH_TR1_DECL nearbyintl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
210 double BOOST_MATH_TR1_DECL boost_nextafter
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
);
211 float BOOST_MATH_TR1_DECL boost_nextafterf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
);
212 long double BOOST_MATH_TR1_DECL boost_nextafterl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
);
214 double BOOST_MATH_TR1_DECL nexttoward
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, long double y
);
215 float BOOST_MATH_TR1_DECL nexttowardf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, long double y
);
216 long double BOOST_MATH_TR1_DECL nexttowardl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
);
218 double BOOST_MATH_TR1_DECL remainder
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
);
219 float BOOST_MATH_TR1_DECL remainderf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
);
220 long double BOOST_MATH_TR1_DECL remainderl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
);
221 double BOOST_MATH_TR1_DECL remquo
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
, int *pquo
);
222 float BOOST_MATH_TR1_DECL remquof
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
, int *pquo
);
223 long double BOOST_MATH_TR1_DECL remquol
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
, int *pquo
);
224 double BOOST_MATH_TR1_DECL rint
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
225 float BOOST_MATH_TR1_DECL rintf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
226 long double BOOST_MATH_TR1_DECL rintl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
228 double BOOST_MATH_TR1_DECL round
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
229 float BOOST_MATH_TR1_DECL roundf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
230 long double BOOST_MATH_TR1_DECL roundl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
232 double BOOST_MATH_TR1_DECL scalbln
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, long ex
);
233 float BOOST_MATH_TR1_DECL scalblnf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, long ex
);
234 long double BOOST_MATH_TR1_DECL scalblnl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long ex
);
235 double BOOST_MATH_TR1_DECL scalbn
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, int ex
);
236 float BOOST_MATH_TR1_DECL scalbnf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, int ex
);
237 long double BOOST_MATH_TR1_DECL scalbnl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, int ex
);
239 double BOOST_MATH_TR1_DECL tgamma
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
240 float BOOST_MATH_TR1_DECL tgammaf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
241 long double BOOST_MATH_TR1_DECL tgammal
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
243 double BOOST_MATH_TR1_DECL trunc
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
244 float BOOST_MATH_TR1_DECL truncf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
245 long double BOOST_MATH_TR1_DECL truncl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
247 // [5.2.1.1] associated Laguerre polynomials:
248 double BOOST_MATH_TR1_DECL assoc_laguerre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, unsigned m
, double x
);
249 float BOOST_MATH_TR1_DECL assoc_laguerref
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, unsigned m
, float x
);
250 long double BOOST_MATH_TR1_DECL assoc_laguerrel
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, unsigned m
, long double x
);
252 // [5.2.1.2] associated Legendre functions:
253 double BOOST_MATH_TR1_DECL assoc_legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, unsigned m
, double x
);
254 float BOOST_MATH_TR1_DECL assoc_legendref
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, unsigned m
, float x
);
255 long double BOOST_MATH_TR1_DECL assoc_legendrel
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, unsigned m
, long double x
);
257 // [5.2.1.3] beta function:
258 double BOOST_MATH_TR1_DECL beta
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
);
259 float BOOST_MATH_TR1_DECL betaf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
);
260 long double BOOST_MATH_TR1_DECL betal
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
);
262 // [5.2.1.4] (complete) elliptic integral of the first kind:
263 double BOOST_MATH_TR1_DECL comp_ellint_1
BOOST_PREVENT_MACRO_SUBSTITUTION(double k
);
264 float BOOST_MATH_TR1_DECL comp_ellint_1f
BOOST_PREVENT_MACRO_SUBSTITUTION(float k
);
265 long double BOOST_MATH_TR1_DECL comp_ellint_1l
BOOST_PREVENT_MACRO_SUBSTITUTION(long double k
);
267 // [5.2.1.5] (complete) elliptic integral of the second kind:
268 double BOOST_MATH_TR1_DECL comp_ellint_2
BOOST_PREVENT_MACRO_SUBSTITUTION(double k
);
269 float BOOST_MATH_TR1_DECL comp_ellint_2f
BOOST_PREVENT_MACRO_SUBSTITUTION(float k
);
270 long double BOOST_MATH_TR1_DECL comp_ellint_2l
BOOST_PREVENT_MACRO_SUBSTITUTION(long double k
);
272 // [5.2.1.6] (complete) elliptic integral of the third kind:
273 double BOOST_MATH_TR1_DECL comp_ellint_3
BOOST_PREVENT_MACRO_SUBSTITUTION(double k
, double nu
);
274 float BOOST_MATH_TR1_DECL comp_ellint_3f
BOOST_PREVENT_MACRO_SUBSTITUTION(float k
, float nu
);
275 long double BOOST_MATH_TR1_DECL comp_ellint_3l
BOOST_PREVENT_MACRO_SUBSTITUTION(long double k
, long double nu
);
277 // [5.2.1.7] confluent hypergeometric functions:
278 double BOOST_MATH_TR1_DECL conf_hyperg
BOOST_PREVENT_MACRO_SUBSTITUTION(double a
, double c
, double x
);
279 float BOOST_MATH_TR1_DECL conf_hypergf
BOOST_PREVENT_MACRO_SUBSTITUTION(float a
, float c
, float x
);
280 long double BOOST_MATH_TR1_DECL conf_hypergl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double a
, long double c
, long double x
);
282 // [5.2.1.8] regular modified cylindrical Bessel functions:
283 double BOOST_MATH_TR1_DECL cyl_bessel_i
BOOST_PREVENT_MACRO_SUBSTITUTION(double nu
, double x
);
284 float BOOST_MATH_TR1_DECL cyl_bessel_if
BOOST_PREVENT_MACRO_SUBSTITUTION(float nu
, float x
);
285 long double BOOST_MATH_TR1_DECL cyl_bessel_il
BOOST_PREVENT_MACRO_SUBSTITUTION(long double nu
, long double x
);
287 // [5.2.1.9] cylindrical Bessel functions (of the first kind):
288 double BOOST_MATH_TR1_DECL cyl_bessel_j
BOOST_PREVENT_MACRO_SUBSTITUTION(double nu
, double x
);
289 float BOOST_MATH_TR1_DECL cyl_bessel_jf
BOOST_PREVENT_MACRO_SUBSTITUTION(float nu
, float x
);
290 long double BOOST_MATH_TR1_DECL cyl_bessel_jl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double nu
, long double x
);
292 // [5.2.1.10] irregular modified cylindrical Bessel functions:
293 double BOOST_MATH_TR1_DECL cyl_bessel_k
BOOST_PREVENT_MACRO_SUBSTITUTION(double nu
, double x
);
294 float BOOST_MATH_TR1_DECL cyl_bessel_kf
BOOST_PREVENT_MACRO_SUBSTITUTION(float nu
, float x
);
295 long double BOOST_MATH_TR1_DECL cyl_bessel_kl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double nu
, long double x
);
297 // [5.2.1.11] cylindrical Neumann functions;
298 // cylindrical Bessel functions (of the second kind):
299 double BOOST_MATH_TR1_DECL cyl_neumann
BOOST_PREVENT_MACRO_SUBSTITUTION(double nu
, double x
);
300 float BOOST_MATH_TR1_DECL cyl_neumannf
BOOST_PREVENT_MACRO_SUBSTITUTION(float nu
, float x
);
301 long double BOOST_MATH_TR1_DECL cyl_neumannl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double nu
, long double x
);
303 // [5.2.1.12] (incomplete) elliptic integral of the first kind:
304 double BOOST_MATH_TR1_DECL ellint_1
BOOST_PREVENT_MACRO_SUBSTITUTION(double k
, double phi
);
305 float BOOST_MATH_TR1_DECL ellint_1f
BOOST_PREVENT_MACRO_SUBSTITUTION(float k
, float phi
);
306 long double BOOST_MATH_TR1_DECL ellint_1l
BOOST_PREVENT_MACRO_SUBSTITUTION(long double k
, long double phi
);
308 // [5.2.1.13] (incomplete) elliptic integral of the second kind:
309 double BOOST_MATH_TR1_DECL ellint_2
BOOST_PREVENT_MACRO_SUBSTITUTION(double k
, double phi
);
310 float BOOST_MATH_TR1_DECL ellint_2f
BOOST_PREVENT_MACRO_SUBSTITUTION(float k
, float phi
);
311 long double BOOST_MATH_TR1_DECL ellint_2l
BOOST_PREVENT_MACRO_SUBSTITUTION(long double k
, long double phi
);
313 // [5.2.1.14] (incomplete) elliptic integral of the third kind:
314 double BOOST_MATH_TR1_DECL ellint_3
BOOST_PREVENT_MACRO_SUBSTITUTION(double k
, double nu
, double phi
);
315 float BOOST_MATH_TR1_DECL ellint_3f
BOOST_PREVENT_MACRO_SUBSTITUTION(float k
, float nu
, float phi
);
316 long double BOOST_MATH_TR1_DECL ellint_3l
BOOST_PREVENT_MACRO_SUBSTITUTION(long double k
, long double nu
, long double phi
);
318 // [5.2.1.15] exponential integral:
319 double BOOST_MATH_TR1_DECL expint
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
320 float BOOST_MATH_TR1_DECL expintf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
321 long double BOOST_MATH_TR1_DECL expintl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
323 // [5.2.1.16] Hermite polynomials:
324 double BOOST_MATH_TR1_DECL hermite
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, double x
);
325 float BOOST_MATH_TR1_DECL hermitef
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, float x
);
326 long double BOOST_MATH_TR1_DECL hermitel
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, long double x
);
329 // [5.2.1.17] hypergeometric functions:
330 double BOOST_MATH_TR1_DECL hyperg
BOOST_PREVENT_MACRO_SUBSTITUTION(double a
, double b
, double c
, double x
);
331 float BOOST_MATH_TR1_DECL hypergf
BOOST_PREVENT_MACRO_SUBSTITUTION(float a
, float b
, float c
, float x
);
332 long double BOOST_MATH_TR1_DECL hypergl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double a
, long double b
, long double c
,
336 // [5.2.1.18] Laguerre polynomials:
337 double BOOST_MATH_TR1_DECL laguerre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, double x
);
338 float BOOST_MATH_TR1_DECL laguerref
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, float x
);
339 long double BOOST_MATH_TR1_DECL laguerrel
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, long double x
);
341 // [5.2.1.19] Legendre polynomials:
342 double BOOST_MATH_TR1_DECL legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, double x
);
343 float BOOST_MATH_TR1_DECL legendref
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, float x
);
344 long double BOOST_MATH_TR1_DECL legendrel
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, long double x
);
346 // [5.2.1.20] Riemann zeta function:
347 double BOOST_MATH_TR1_DECL riemann_zeta
BOOST_PREVENT_MACRO_SUBSTITUTION(double);
348 float BOOST_MATH_TR1_DECL riemann_zetaf
BOOST_PREVENT_MACRO_SUBSTITUTION(float);
349 long double BOOST_MATH_TR1_DECL riemann_zetal
BOOST_PREVENT_MACRO_SUBSTITUTION(long double);
351 // [5.2.1.21] spherical Bessel functions (of the first kind):
352 double BOOST_MATH_TR1_DECL sph_bessel
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, double x
);
353 float BOOST_MATH_TR1_DECL sph_besself
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, float x
);
354 long double BOOST_MATH_TR1_DECL sph_bessell
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, long double x
);
356 // [5.2.1.22] spherical associated Legendre functions:
357 double BOOST_MATH_TR1_DECL sph_legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, unsigned m
, double theta
);
358 float BOOST_MATH_TR1_DECL sph_legendref
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, unsigned m
, float theta
);
359 long double BOOST_MATH_TR1_DECL sph_legendrel
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, unsigned m
, long double theta
);
361 // [5.2.1.23] spherical Neumann functions;
362 // spherical Bessel functions (of the second kind):
363 double BOOST_MATH_TR1_DECL sph_neumann
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, double x
);
364 float BOOST_MATH_TR1_DECL sph_neumannf
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, float x
);
365 long double BOOST_MATH_TR1_DECL sph_neumannl
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, long double x
);
371 #include <boost/math/tools/promotion.hpp>
373 namespace boost
{ namespace math
{ namespace tr1
{
375 // Declare overload of the functions which forward to the
379 inline float acosh
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
380 { return boost::math::tr1::acoshf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
381 inline long double acosh
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
382 { return boost::math::tr1::acoshl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
384 inline typename
tools::promote_args
<T
>::type acosh
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
385 { return boost::math::tr1::acosh
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
387 inline float asinh
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
){ return boost::math::tr1::asinhf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
388 inline long double asinh
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
){ return boost::math::tr1::asinhl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
390 inline typename
tools::promote_args
<T
>::type asinh
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
391 { return boost::math::tr1::asinh
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
393 inline float atanh
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
){ return boost::math::tr1::atanhf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
394 inline long double atanh
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
){ return boost::math::tr1::atanhl(x
); }
396 inline typename
tools::promote_args
<T
>::type atanh
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
397 { return boost::math::tr1::atanh
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
399 inline float cbrt
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
400 { return boost::math::tr1::cbrtf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
401 inline long double cbrt
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
402 { return boost::math::tr1::cbrtl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
404 inline typename
tools::promote_args
<T
>::type cbrt
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
405 { return boost::math::tr1::cbrt
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
407 inline float copysign
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
)
408 { return boost::math::tr1::copysignf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
409 inline long double copysign
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
)
410 { return boost::math::tr1::copysignl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
411 template <class T1
, class T2
>
412 inline typename
tools::promote_args
<T1
, T2
>::type copysign
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 x
, T2 y
)
413 { return boost::math::tr1::copysign
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(x
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(y
)); }
415 inline float erf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
416 { return boost::math::tr1::erff
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
417 inline long double erf
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
418 { return boost::math::tr1::erfl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
420 inline typename
tools::promote_args
<T
>::type erf
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
421 { return boost::math::tr1::erf
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
423 inline float erfc
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
424 { return boost::math::tr1::erfcf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
425 inline long double erfc
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
426 { return boost::math::tr1::erfcl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
428 inline typename
tools::promote_args
<T
>::type erfc
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
429 { return boost::math::tr1::erfc
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
431 double exp2
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
432 float exp2f
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
433 long double exp2l
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
435 inline float expm1f
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
436 { return boost::math::tr1::boost_expm1f
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
437 inline double expm1
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
)
438 { return boost::math::tr1::boost_expm1
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
439 inline long double expm1l
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
440 { return boost::math::tr1::boost_expm1l
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
441 inline float expm1
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
442 { return boost::math::tr1::expm1f
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
443 inline long double expm1
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
444 { return boost::math::tr1::expm1l
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
446 inline typename
tools::promote_args
<T
>::type expm1
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
447 { return boost::math::tr1::expm1
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
449 double fdim
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
);
450 float fdimf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
);
451 long double fdiml
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
);
452 double fma
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
, double z
);
453 float fmaf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
, float z
);
454 long double fmal
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
, long double z
);
456 inline float fmax
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
)
457 { return boost::math::tr1::fmaxf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
458 inline long double fmax
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
)
459 { return boost::math::tr1::fmaxl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
460 template <class T1
, class T2
>
461 inline typename
tools::promote_args
<T1
, T2
>::type fmax
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 x
, T2 y
)
462 { return boost::math::tr1::fmax
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(x
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(y
)); }
464 inline float fmin
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
)
465 { return boost::math::tr1::fminf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
466 inline long double fmin
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
)
467 { return boost::math::tr1::fminl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
468 template <class T1
, class T2
>
469 inline typename
tools::promote_args
<T1
, T2
>::type fmin
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 x
, T2 y
)
470 { return boost::math::tr1::fmin
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(x
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(y
)); }
472 inline float hypot
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
)
473 { return boost::math::tr1::hypotf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
474 inline long double hypot
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
)
475 { return boost::math::tr1::hypotl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
476 template <class T1
, class T2
>
477 inline typename
tools::promote_args
<T1
, T2
>::type hypot
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 x
, T2 y
)
478 { return boost::math::tr1::hypot
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(x
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(y
)); }
480 int ilogb
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
481 int ilogbf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
482 int ilogbl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
484 inline float lgamma
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
485 { return boost::math::tr1::lgammaf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
486 inline long double lgamma
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
487 { return boost::math::tr1::lgammal
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
489 inline typename
tools::promote_args
<T
>::type lgamma
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
490 { return boost::math::tr1::lgamma
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
491 #ifdef BOOST_HAS_LONG_LONG
493 ::boost::long_long_type llrint
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
494 ::boost::long_long_type llrintf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
495 ::boost::long_long_type llrintl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
497 inline ::boost::long_long_type llround
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
498 { return boost::math::tr1::llroundf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
499 inline ::boost::long_long_type llround
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
500 { return boost::math::tr1::llroundl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
502 inline ::boost::long_long_type llround
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
503 { return llround
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<double>(x
)); }
505 inline float log1pf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
506 { return boost::math::tr1::boost_log1pf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
507 inline double log1p
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
)
508 { return boost::math::tr1::boost_log1p
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
509 inline long double log1pl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
510 { return boost::math::tr1::boost_log1pl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
511 inline float log1p
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
512 { return boost::math::tr1::log1pf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
513 inline long double log1p
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
514 { return boost::math::tr1::log1pl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
516 inline typename
tools::promote_args
<T
>::type log1p
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
517 { return boost::math::tr1::log1p
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
519 double log2
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
520 float log2f
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
521 long double log2l
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
523 double logb
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
524 float logbf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
525 long double logbl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
526 long lrint
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
527 long lrintf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
528 long lrintl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
530 inline long lround
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
531 { return boost::math::tr1::lroundf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
532 inline long lround
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
533 { return boost::math::tr1::lroundl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
535 long lround
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
536 { return boost::math::tr1::lround
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<double>(x
)); }
538 double nan
BOOST_PREVENT_MACRO_SUBSTITUTION(const char *str
);
539 float nanf
BOOST_PREVENT_MACRO_SUBSTITUTION(const char *str
);
540 long double nanl
BOOST_PREVENT_MACRO_SUBSTITUTION(const char *str
);
541 double nearbyint
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
542 float nearbyintf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
543 long double nearbyintl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
545 inline float nextafterf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
)
546 { return boost::math::tr1::boost_nextafterf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
547 inline double nextafter
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
)
548 { return boost::math::tr1::boost_nextafter
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
549 inline long double nextafterl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
)
550 { return boost::math::tr1::boost_nextafterl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
551 inline float nextafter
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
)
552 { return boost::math::tr1::nextafterf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
553 inline long double nextafter
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
)
554 { return boost::math::tr1::nextafterl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
555 template <class T1
, class T2
>
556 inline typename
tools::promote_args
<T1
, T2
>::type nextafter
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 x
, T2 y
)
557 { return boost::math::tr1::nextafter
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(x
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(y
)); }
559 inline float nexttoward
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, long double y
)
560 { return boost::math::tr1::nexttowardf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
561 inline long double nexttoward
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
)
562 { return boost::math::tr1::nexttowardl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
563 template <class T1
, class T2
>
564 inline typename
tools::promote_args
<T1
, T2
>::type nexttoward
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 x
, T2 y
)
565 { return boost::math::tr1::nexttoward
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(x
), static_cast<long double>(y
)); }
567 double remainder
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
);
568 float remainderf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
);
569 long double remainderl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
);
570 double remquo
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, double y
, int *pquo
);
571 float remquof
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
, int *pquo
);
572 long double remquol
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
, int *pquo
);
573 double rint
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
);
574 float rintf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
);
575 long double rintl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
);
577 inline float round
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
578 { return boost::math::tr1::roundf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
579 inline long double round
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
580 { return boost::math::tr1::roundl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
582 inline typename
tools::promote_args
<T
>::type round
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
583 { return boost::math::tr1::round
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
585 double scalbln
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, long ex
);
586 float scalblnf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, long ex
);
587 long double scalblnl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long ex
);
588 double scalbn
BOOST_PREVENT_MACRO_SUBSTITUTION(double x
, int ex
);
589 float scalbnf
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, int ex
);
590 long double scalbnl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, int ex
);
592 inline float tgamma
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
593 { return boost::math::tr1::tgammaf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
594 inline long double tgamma
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
595 { return boost::math::tr1::tgammal
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
597 inline typename
tools::promote_args
<T
>::type tgamma
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
598 { return boost::math::tr1::tgamma
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
600 inline float trunc
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
601 { return boost::math::tr1::truncf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
602 inline long double trunc
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
603 { return boost::math::tr1::truncl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
605 inline typename
tools::promote_args
<T
>::type trunc
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
606 { return boost::math::tr1::trunc
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
608 # define NO_MACRO_EXPAND /**/
609 // C99 macros defined as C++ templates
610 template<class T
> bool signbit
NO_MACRO_EXPAND(T x
)
611 { BOOST_STATIC_ASSERT(sizeof(T
) == 0); return false; } // must not be instantiated
612 template<> bool BOOST_MATH_TR1_DECL signbit
<float> NO_MACRO_EXPAND(float x
);
613 template<> bool BOOST_MATH_TR1_DECL signbit
<double> NO_MACRO_EXPAND(double x
);
614 template<> bool BOOST_MATH_TR1_DECL signbit
<long double> NO_MACRO_EXPAND(long double x
);
616 template<class T
> int fpclassify
NO_MACRO_EXPAND(T x
)
617 { BOOST_STATIC_ASSERT(sizeof(T
) == 0); return false; } // must not be instantiated
618 template<> int BOOST_MATH_TR1_DECL fpclassify
<float> NO_MACRO_EXPAND(float x
);
619 template<> int BOOST_MATH_TR1_DECL fpclassify
<double> NO_MACRO_EXPAND(double x
);
620 template<> int BOOST_MATH_TR1_DECL fpclassify
<long double> NO_MACRO_EXPAND(long double x
);
622 template<class T
> bool isfinite
NO_MACRO_EXPAND(T x
)
623 { BOOST_STATIC_ASSERT(sizeof(T
) == 0); return false; } // must not be instantiated
624 template<> bool BOOST_MATH_TR1_DECL isfinite
<float> NO_MACRO_EXPAND(float x
);
625 template<> bool BOOST_MATH_TR1_DECL isfinite
<double> NO_MACRO_EXPAND(double x
);
626 template<> bool BOOST_MATH_TR1_DECL isfinite
<long double> NO_MACRO_EXPAND(long double x
);
628 template<class T
> bool isinf
NO_MACRO_EXPAND(T x
)
629 { BOOST_STATIC_ASSERT(sizeof(T
) == 0); return false; } // must not be instantiated
630 template<> bool BOOST_MATH_TR1_DECL isinf
<float> NO_MACRO_EXPAND(float x
);
631 template<> bool BOOST_MATH_TR1_DECL isinf
<double> NO_MACRO_EXPAND(double x
);
632 template<> bool BOOST_MATH_TR1_DECL isinf
<long double> NO_MACRO_EXPAND(long double x
);
634 template<class T
> bool isnan
NO_MACRO_EXPAND(T x
)
635 { BOOST_STATIC_ASSERT(sizeof(T
) == 0); return false; } // must not be instantiated
636 template<> bool BOOST_MATH_TR1_DECL isnan
<float> NO_MACRO_EXPAND(float x
);
637 template<> bool BOOST_MATH_TR1_DECL isnan
<double> NO_MACRO_EXPAND(double x
);
638 template<> bool BOOST_MATH_TR1_DECL isnan
<long double> NO_MACRO_EXPAND(long double x
);
640 template<class T
> bool isnormal
NO_MACRO_EXPAND(T x
)
641 { BOOST_STATIC_ASSERT(sizeof(T
) == 0); return false; } // must not be instantiated
642 template<> bool BOOST_MATH_TR1_DECL isnormal
<float> NO_MACRO_EXPAND(float x
);
643 template<> bool BOOST_MATH_TR1_DECL isnormal
<double> NO_MACRO_EXPAND(double x
);
644 template<> bool BOOST_MATH_TR1_DECL isnormal
<long double> NO_MACRO_EXPAND(long double x
);
646 #undef NO_MACRO_EXPAND
648 // [5.2.1.1] associated Laguerre polynomials:
649 inline float assoc_laguerre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, unsigned m
, float x
)
650 { return boost::math::tr1::assoc_laguerref
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, m
, x
); }
651 inline long double assoc_laguerre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, unsigned m
, long double x
)
652 { return boost::math::tr1::assoc_laguerrel
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, m
, x
); }
654 inline typename
tools::promote_args
<T
>::type assoc_laguerre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, unsigned m
, T x
)
655 { return boost::math::tr1::assoc_laguerre
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, m
, static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
657 // [5.2.1.2] associated Legendre functions:
658 inline float assoc_legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, unsigned m
, float x
)
659 { return boost::math::tr1::assoc_legendref
BOOST_PREVENT_MACRO_SUBSTITUTION(l
, m
, x
); }
660 inline long double assoc_legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, unsigned m
, long double x
)
661 { return boost::math::tr1::assoc_legendrel
BOOST_PREVENT_MACRO_SUBSTITUTION(l
, m
, x
); }
663 inline typename
tools::promote_args
<T
>::type assoc_legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, unsigned m
, T x
)
664 { return boost::math::tr1::assoc_legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(l
, m
, static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
666 // [5.2.1.3] beta function:
667 inline float beta
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
, float y
)
668 { return boost::math::tr1::betaf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
669 inline long double beta
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
, long double y
)
670 { return boost::math::tr1::betal
BOOST_PREVENT_MACRO_SUBSTITUTION(x
, y
); }
671 template <class T1
, class T2
>
672 inline typename
tools::promote_args
<T1
, T2
>::type beta
BOOST_PREVENT_MACRO_SUBSTITUTION(T2 x
, T1 y
)
673 { return boost::math::tr1::beta
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(x
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(y
)); }
675 // [5.2.1.4] (complete) elliptic integral of the first kind:
676 inline float comp_ellint_1
BOOST_PREVENT_MACRO_SUBSTITUTION(float k
)
677 { return boost::math::tr1::comp_ellint_1f
BOOST_PREVENT_MACRO_SUBSTITUTION(k
); }
678 inline long double comp_ellint_1
BOOST_PREVENT_MACRO_SUBSTITUTION(long double k
)
679 { return boost::math::tr1::comp_ellint_1l
BOOST_PREVENT_MACRO_SUBSTITUTION(k
); }
681 inline typename
tools::promote_args
<T
>::type comp_ellint_1
BOOST_PREVENT_MACRO_SUBSTITUTION(T k
)
682 { return boost::math::tr1::comp_ellint_1
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(k
)); }
684 // [5.2.1.5] BOOST_PREVENT_MACRO_SUBSTITUTION(complete) elliptic integral of the second kind:
685 inline float comp_ellint_2(float k
)
686 { return boost::math::tr1::comp_ellint_2f(k
); }
687 inline long double comp_ellint_2(long double k
)
688 { return boost::math::tr1::comp_ellint_2l(k
); }
690 inline typename
tools::promote_args
<T
>::type
comp_ellint_2(T k
)
691 { return boost::math::tr1::comp_ellint_2(static_cast<typename
tools::promote_args
<T
>::type
> BOOST_PREVENT_MACRO_SUBSTITUTION(k
)); }
693 // [5.2.1.6] BOOST_PREVENT_MACRO_SUBSTITUTION(complete) elliptic integral of the third kind:
694 inline float comp_ellint_3(float k
, float nu
)
695 { return boost::math::tr1::comp_ellint_3f(k
, nu
); }
696 inline long double comp_ellint_3(long double k
, long double nu
)
697 { return boost::math::tr1::comp_ellint_3l(k
, nu
); }
698 template <class T1
, class T2
>
699 inline typename
tools::promote_args
<T1
, T2
>::type
comp_ellint_3(T1 k
, T2 nu
)
700 { return boost::math::tr1::comp_ellint_3(static_cast<typename
tools::promote_args
<T1
, T2
>::type
> BOOST_PREVENT_MACRO_SUBSTITUTION(k
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
> BOOST_PREVENT_MACRO_SUBSTITUTION(nu
)); }
703 // [5.2.1.7] confluent hypergeometric functions:
704 double conf_hyperg
BOOST_PREVENT_MACRO_SUBSTITUTION(double a
, double c
, double x
);
705 float conf_hypergf
BOOST_PREVENT_MACRO_SUBSTITUTION(float a
, float c
, float x
);
706 long double conf_hypergl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double a
, long double c
, long double x
);
709 // [5.2.1.8] regular modified cylindrical Bessel functions:
710 inline float cyl_bessel_i
BOOST_PREVENT_MACRO_SUBSTITUTION(float nu
, float x
)
711 { return boost::math::tr1::cyl_bessel_if
BOOST_PREVENT_MACRO_SUBSTITUTION(nu
, x
); }
712 inline long double cyl_bessel_i
BOOST_PREVENT_MACRO_SUBSTITUTION(long double nu
, long double x
)
713 { return boost::math::tr1::cyl_bessel_il
BOOST_PREVENT_MACRO_SUBSTITUTION(nu
, x
); }
714 template <class T1
, class T2
>
715 inline typename
tools::promote_args
<T1
, T2
>::type cyl_bessel_i
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 nu
, T2 x
)
716 { return boost::math::tr1::cyl_bessel_i
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(nu
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(x
)); }
718 // [5.2.1.9] cylindrical Bessel functions (of the first kind):
719 inline float cyl_bessel_j
BOOST_PREVENT_MACRO_SUBSTITUTION(float nu
, float x
)
720 { return boost::math::tr1::cyl_bessel_jf
BOOST_PREVENT_MACRO_SUBSTITUTION(nu
, x
); }
721 inline long double cyl_bessel_j
BOOST_PREVENT_MACRO_SUBSTITUTION(long double nu
, long double x
)
722 { return boost::math::tr1::cyl_bessel_jl
BOOST_PREVENT_MACRO_SUBSTITUTION(nu
, x
); }
723 template <class T1
, class T2
>
724 inline typename
tools::promote_args
<T1
, T2
>::type cyl_bessel_j
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 nu
, T2 x
)
725 { return boost::math::tr1::cyl_bessel_j
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(nu
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(x
)); }
727 // [5.2.1.10] irregular modified cylindrical Bessel functions:
728 inline float cyl_bessel_k
BOOST_PREVENT_MACRO_SUBSTITUTION(float nu
, float x
)
729 { return boost::math::tr1::cyl_bessel_kf
BOOST_PREVENT_MACRO_SUBSTITUTION(nu
, x
); }
730 inline long double cyl_bessel_k
BOOST_PREVENT_MACRO_SUBSTITUTION(long double nu
, long double x
)
731 { return boost::math::tr1::cyl_bessel_kl
BOOST_PREVENT_MACRO_SUBSTITUTION(nu
, x
); }
732 template <class T1
, class T2
>
733 inline typename
tools::promote_args
<T1
, T2
>::type cyl_bessel_k
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 nu
, T2 x
)
734 { return boost::math::tr1::cyl_bessel_k
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
> BOOST_PREVENT_MACRO_SUBSTITUTION(nu
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(x
)); }
736 // [5.2.1.11] cylindrical Neumann functions;
737 // cylindrical Bessel functions (of the second kind):
738 inline float cyl_neumann
BOOST_PREVENT_MACRO_SUBSTITUTION(float nu
, float x
)
739 { return boost::math::tr1::cyl_neumannf
BOOST_PREVENT_MACRO_SUBSTITUTION(nu
, x
); }
740 inline long double cyl_neumann
BOOST_PREVENT_MACRO_SUBSTITUTION(long double nu
, long double x
)
741 { return boost::math::tr1::cyl_neumannl
BOOST_PREVENT_MACRO_SUBSTITUTION(nu
, x
); }
742 template <class T1
, class T2
>
743 inline typename
tools::promote_args
<T1
, T2
>::type cyl_neumann
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 nu
, T2 x
)
744 { return boost::math::tr1::cyl_neumann
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(nu
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(x
)); }
746 // [5.2.1.12] (incomplete) elliptic integral of the first kind:
747 inline float ellint_1
BOOST_PREVENT_MACRO_SUBSTITUTION(float k
, float phi
)
748 { return boost::math::tr1::ellint_1f
BOOST_PREVENT_MACRO_SUBSTITUTION(k
, phi
); }
749 inline long double ellint_1
BOOST_PREVENT_MACRO_SUBSTITUTION(long double k
, long double phi
)
750 { return boost::math::tr1::ellint_1l
BOOST_PREVENT_MACRO_SUBSTITUTION(k
, phi
); }
751 template <class T1
, class T2
>
752 inline typename
tools::promote_args
<T1
, T2
>::type ellint_1
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 k
, T2 phi
)
753 { return boost::math::tr1::ellint_1
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(k
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(phi
)); }
755 // [5.2.1.13] (incomplete) elliptic integral of the second kind:
756 inline float ellint_2
BOOST_PREVENT_MACRO_SUBSTITUTION(float k
, float phi
)
757 { return boost::math::tr1::ellint_2f
BOOST_PREVENT_MACRO_SUBSTITUTION(k
, phi
); }
758 inline long double ellint_2
BOOST_PREVENT_MACRO_SUBSTITUTION(long double k
, long double phi
)
759 { return boost::math::tr1::ellint_2l
BOOST_PREVENT_MACRO_SUBSTITUTION(k
, phi
); }
760 template <class T1
, class T2
>
761 inline typename
tools::promote_args
<T1
, T2
>::type ellint_2
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 k
, T2 phi
)
762 { return boost::math::tr1::ellint_2
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(k
), static_cast<typename
tools::promote_args
<T1
, T2
>::type
>(phi
)); }
764 // [5.2.1.14] (incomplete) elliptic integral of the third kind:
765 inline float ellint_3
BOOST_PREVENT_MACRO_SUBSTITUTION(float k
, float nu
, float phi
)
766 { return boost::math::tr1::ellint_3f
BOOST_PREVENT_MACRO_SUBSTITUTION(k
, nu
, phi
); }
767 inline long double ellint_3
BOOST_PREVENT_MACRO_SUBSTITUTION(long double k
, long double nu
, long double phi
)
768 { return boost::math::tr1::ellint_3l
BOOST_PREVENT_MACRO_SUBSTITUTION(k
, nu
, phi
); }
769 template <class T1
, class T2
, class T3
>
770 inline typename
tools::promote_args
<T1
, T2
, T3
>::type ellint_3
BOOST_PREVENT_MACRO_SUBSTITUTION(T1 k
, T2 nu
, T3 phi
)
771 { return boost::math::tr1::ellint_3
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T1
, T2
, T3
>::type
>(k
), static_cast<typename
tools::promote_args
<T1
, T2
, T3
>::type
>(nu
), static_cast<typename
tools::promote_args
<T1
, T2
, T3
>::type
>(phi
)); }
773 // [5.2.1.15] exponential integral:
774 inline float expint
BOOST_PREVENT_MACRO_SUBSTITUTION(float x
)
775 { return boost::math::tr1::expintf
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
776 inline long double expint
BOOST_PREVENT_MACRO_SUBSTITUTION(long double x
)
777 { return boost::math::tr1::expintl
BOOST_PREVENT_MACRO_SUBSTITUTION(x
); }
779 inline typename
tools::promote_args
<T
>::type expint
BOOST_PREVENT_MACRO_SUBSTITUTION(T x
)
780 { return boost::math::tr1::expint
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
782 // [5.2.1.16] Hermite polynomials:
783 inline float hermite
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, float x
)
784 { return boost::math::tr1::hermitef
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, x
); }
785 inline long double hermite
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, long double x
)
786 { return boost::math::tr1::hermitel
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, x
); }
788 inline typename
tools::promote_args
<T
>::type hermite
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, T x
)
789 { return boost::math::tr1::hermite
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
792 // [5.2.1.17] hypergeometric functions:
793 double hyperg
BOOST_PREVENT_MACRO_SUBSTITUTION(double a
, double b
, double c
, double x
);
794 float hypergf
BOOST_PREVENT_MACRO_SUBSTITUTION(float a
, float b
, float c
, float x
);
795 long double hypergl
BOOST_PREVENT_MACRO_SUBSTITUTION(long double a
, long double b
, long double c
,
799 // [5.2.1.18] Laguerre polynomials:
800 inline float laguerre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, float x
)
801 { return boost::math::tr1::laguerref
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, x
); }
802 inline long double laguerre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, long double x
)
803 { return boost::math::tr1::laguerrel
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, x
); }
805 inline typename
tools::promote_args
<T
>::type laguerre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, T x
)
806 { return boost::math::tr1::laguerre
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
808 // [5.2.1.19] Legendre polynomials:
809 inline float legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, float x
)
810 { return boost::math::tr1::legendref
BOOST_PREVENT_MACRO_SUBSTITUTION(l
, x
); }
811 inline long double legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, long double x
)
812 { return boost::math::tr1::legendrel
BOOST_PREVENT_MACRO_SUBSTITUTION(l
, x
); }
814 inline typename
tools::promote_args
<T
>::type legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, T x
)
815 { return boost::math::tr1::legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(l
, static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
817 // [5.2.1.20] Riemann zeta function:
818 inline float riemann_zeta
BOOST_PREVENT_MACRO_SUBSTITUTION(float z
)
819 { return boost::math::tr1::riemann_zetaf
BOOST_PREVENT_MACRO_SUBSTITUTION(z
); }
820 inline long double riemann_zeta
BOOST_PREVENT_MACRO_SUBSTITUTION(long double z
)
821 { return boost::math::tr1::riemann_zetal
BOOST_PREVENT_MACRO_SUBSTITUTION(z
); }
823 inline typename
tools::promote_args
<T
>::type riemann_zeta
BOOST_PREVENT_MACRO_SUBSTITUTION(T z
)
824 { return boost::math::tr1::riemann_zeta
BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<typename
tools::promote_args
<T
>::type
>(z
)); }
826 // [5.2.1.21] spherical Bessel functions (of the first kind):
827 inline float sph_bessel
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, float x
)
828 { return boost::math::tr1::sph_besself
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, x
); }
829 inline long double sph_bessel
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, long double x
)
830 { return boost::math::tr1::sph_bessell
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, x
); }
832 inline typename
tools::promote_args
<T
>::type sph_bessel
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, T x
)
833 { return boost::math::tr1::sph_bessel
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
835 // [5.2.1.22] spherical associated Legendre functions:
836 inline float sph_legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, unsigned m
, float theta
)
837 { return boost::math::tr1::sph_legendref
BOOST_PREVENT_MACRO_SUBSTITUTION(l
, m
, theta
); }
838 inline long double sph_legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, unsigned m
, long double theta
)
839 { return boost::math::tr1::sph_legendrel
BOOST_PREVENT_MACRO_SUBSTITUTION(l
, m
, theta
); }
841 inline typename
tools::promote_args
<T
>::type sph_legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned l
, unsigned m
, T theta
)
842 { return boost::math::tr1::sph_legendre
BOOST_PREVENT_MACRO_SUBSTITUTION(l
, m
, static_cast<typename
tools::promote_args
<T
>::type
>(theta
)); }
844 // [5.2.1.23] spherical Neumann functions;
845 // spherical Bessel functions (of the second kind):
846 inline float sph_neumann
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, float x
)
847 { return boost::math::tr1::sph_neumannf
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, x
); }
848 inline long double sph_neumann
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, long double x
)
849 { return boost::math::tr1::sph_neumannl
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, x
); }
851 inline typename
tools::promote_args
<T
>::type sph_neumann
BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n
, T x
)
852 { return boost::math::tr1::sph_neumann
BOOST_PREVENT_MACRO_SUBSTITUTION(n
, static_cast<typename
tools::promote_args
<T
>::type
>(x
)); }
856 #endif // __cplusplus
858 #endif // BOOST_MATH_TR1_HPP