diff options
author | bkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-16 10:35:16 +0000 |
---|---|---|
committer | bkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-16 10:35:16 +0000 |
commit | b34f60accb416680ed11789c89296e3c68ed68f1 (patch) | |
tree | decac71c7af454edb119868a1763aff3b7c70e56 /libstdc++-v3/include/tr1/cmath | |
parent | 15ec875c733b473953eae3637f13665dffb0589b (diff) | |
download | gcc-b34f60accb416680ed11789c89296e3c68ed68f1.tar.gz |
2007-03-16 Benjamin Kosnik <bkoz@redhat.com>
* testsuite/lib/dg-options.exp (dg-require-c-std): New.
* testsuite/lib/libstdc++.exp (check_v3_target_c_std): New. Check to
see if _GLIBCXX_USE_C99_MATH is active.
* testsuite/tr1/5_numerical_facilities/special_functions/
08_cyl_bessel_i/check_nan.cc: Use dg-require-c-std.
* testsuite/tr1/5_numerical_facilities/special_functions/
17_hyperg/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
13_ellint_2/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
20_riemann_zeta/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
01_assoc_laguerre/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
02_assoc_legendre/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
22_sph_legendre/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
10_cyl_bessel_k/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
09_cyl_bessel_j/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
21_sph_bessel/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
07_conf_hyperg/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
16_hermite/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
12_ellint_1/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
05_comp_ellint_2/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
18_laguerre/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
14_ellint_3/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
04_comp_ellint_1/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
06_comp_ellint_3/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
19_legendre/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
03_beta/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
11_cyl_neumann/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
15_expint/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
23_sph_neumann/check_nan.cc: Same.
* include/tr1/poly_laguerre.tcc (__poly_laguerre): Don't check if
unsigned int can be a NaN.
2007-03-16 Edward M. Smith-Rowland <3dw4rd@verizon.net>
* docs/html/ext/tr1.html : Marked tr1 math special functions done.
* docs/html/faq/index.html : Ditto.
* include/Makefile.in : Added new special function header files.
* include/Makefile.am : Ditto.
* include/tr1/common.h : Added type promotion routines for three
and four args.
* include/tr1/special_function_util.h: New.
* include/tr1/bessel_function.tcc: New.
* include/tr1/beta_function.tcc: New.
* include/tr1/ell_integral.tcc: New.
* include/tr1/exp_integral.tcc: New.
* include/tr1/gamma.tcc: New.
* include/tr1/hypergeometric.tcc: New.
* include/tr1/legendre_function.tcc: New.
* include/tr1/modified_bessel_func.tcc: New.
* include/tr1/poly_hermite.tcc: New.
* include/tr1/poly_laguerre.tcc: New.
* include/tr1/riemann_zeta.tcc: New.
* include/tr1/cmath : Included tr1 math special functions.
* include/tr1/math.h : Ditto.
* testsuite/tr1/5_numerical_facilities/special_functions/
testcase.h: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
01_assoc_laguerre/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
01_assoc_laguerre/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
01_assoc_laguerre/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
01_assoc_laguerre/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
02_assoc_legendre/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
02_assoc_legendre/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
02_assoc_legendre/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
02_assoc_legendre/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/03_beta/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/03_beta/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/03_beta/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/03_beta/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
04_comp_ellint_1/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
04_comp_ellint_1/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
04_comp_ellint_1/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
04_comp_ellint_1/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
05_comp_ellint_2/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
05_comp_ellint_2/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
05_comp_ellint_2/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
05_comp_ellint_2/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
06_comp_ellint_3/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
06_comp_ellint_3/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
06_comp_ellint_3/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
06_comp_ellint_3/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
07_conf_hyperg/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
07_conf_hyperg/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
07_conf_hyperg/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
07_conf_hyperg/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
08_cyl_bessel_i/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
08_cyl_bessel_i/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
08_cyl_bessel_i/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
08_cyl_bessel_i/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
09_cyl_bessel_j/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
09_cyl_bessel_j/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
09_cyl_bessel_j/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
09_cyl_bessel_j/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
10_cyl_bessel_k/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
10_cyl_bessel_k/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
10_cyl_bessel_k/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
10_cyl_bessel_k/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
11_cyl_neumann/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
11_cyl_neumann/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
11_cyl_neumann/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
11_cyl_neumann/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/15_expint/
check_value_neg.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/15_expint/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/15_expint/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/15_expint/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/15_expint/
check_value_pos.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
20_riemann_zeta/check_value_neg.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
20_riemann_zeta/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
20_riemann_zeta/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
20_riemann_zeta/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
20_riemann_zeta/check_value_pos.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
21_sph_bessel/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
21_sph_bessel/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
21_sph_bessel/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
21_sph_bessel/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
22_sph_legendre/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
22_sph_legendre/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
22_sph_legendre/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
22_sph_legendre/compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
23_sph_neumann/compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
23_sph_neumann/check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
23_sph_neumann/check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/
23_sph_neumann/ compile_2.cc: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122986 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/tr1/cmath')
-rw-r--r-- | libstdc++-v3/include/tr1/cmath | 469 |
1 files changed, 468 insertions, 1 deletions
diff --git a/libstdc++-v3/include/tr1/cmath b/libstdc++-v3/include/tr1/cmath index 65115e67350..b07add26156 100644 --- a/libstdc++-v3/include/tr1/cmath +++ b/libstdc++-v3/include/tr1/cmath @@ -1,6 +1,6 @@ // TR1 cmath -*- C++ -*- -// Copyright (C) 2006 Free Software Foundation, Inc. +// Copyright (C) 2006-2007 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -35,6 +35,7 @@ #define _TR1_CMATH 1 #include <bits/c++config.h> +#include <algorithm> #include <cmath> #include <tr1/common.h> @@ -940,4 +941,470 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) _GLIBCXX_END_NAMESPACE } + /** + * @defgroup tr1_math_spec_func Mathematical Special Functions + * A collection of advanced mathematical special functions. + * @{ + */ + +#include <tr1/gamma.tcc> +#include <tr1/bessel_function.tcc> +#include <tr1/beta_function.tcc> +#include <tr1/ell_integral.tcc> +#include <tr1/exp_integral.tcc> +#include <tr1/hypergeometric.tcc> +#include <tr1/legendre_function.tcc> +#include <tr1/modified_bessel_func.tcc> +#include <tr1/poly_hermite.tcc> +#include <tr1/poly_laguerre.tcc> +#include <tr1/riemann_zeta.tcc> + +// namespace std::tr1 +namespace std +{ +_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) + + // 5.2.1.1 Associated Laguerre polynomials. + + inline float + assoc_laguerref(unsigned int __n, unsigned int __m, float __x) + { return __detail::__assoc_laguerre<float>(__n, __m, __x); } + + inline long double + assoc_laguerrel(unsigned int __n, unsigned int __m, long double __x) + { + return __detail::__assoc_laguerre<long double>(__n, __m, __x); + } + + template<typename _Tp> + inline typename __promote<_Tp>::__type + assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x) + { + typedef typename __promote<_Tp>::__type __type; + return __detail::__assoc_laguerre<__type>(__n, __m, __x); + } + + + // 5.2.1.2 Associated Legendre functions. + + inline float + assoc_legendref(unsigned int __l, unsigned int __m, float __x) + { return __detail::__assoc_legendre_p<float>(__l, __m, __x); } + + inline long double + assoc_legendrel(unsigned int __l, unsigned int __m, long double __x) + { return __detail::__assoc_legendre_p<long double>(__l, __m, __x); } + + template<typename _Tp> + inline typename __promote<_Tp>::__type + assoc_legendre(unsigned int __l, unsigned int __m, _Tp __x) + { + typedef typename __promote<_Tp>::__type __type; + return __detail::__assoc_legendre_p<__type>(__l, __m, __x); + } + + + // 5.2.1.3 Beta functions. + + inline float + betaf(float __x, float __y) + { return __detail::__beta<float>(__x, __y); } + + inline long double + betal(long double __x, long double __y) + { return __detail::__beta<long double>(__x, __y); } + + template<typename _Tpx, typename _Tpy> + inline typename __promote_2<_Tpx, _Tpy>::__type + beta(_Tpx __x, _Tpy __y) + { + typedef typename __promote_2<_Tpx, _Tpy>::__type __type; + return __detail::__beta<__type>(__x, __y); + } + + + // 5.2.1.4 Complete elliptic interals of the first kind. + + inline float + comp_ellint_1f(float __k) + { return __detail::__comp_ellint_1<float>(__k); } + + inline long double + comp_ellint_1l(long double __k) + { return __detail::__comp_ellint_1<long double>(__k); } + + template<typename _Tp> + inline typename __promote<_Tp>::__type + comp_ellint_1(_Tp __k) + { + typedef typename __promote<_Tp>::__type __type; + return __detail::__comp_ellint_1<__type>(__k); + } + + + // 5.2.1.5 Complete elliptic interals of the second kind. + + inline float + comp_ellint_2f(float __k) + { return __detail::__comp_ellint_2<float>(__k); } + + inline long double + comp_ellint_2l(long double __k) + { return __detail::__comp_ellint_2<long double>(__k); } + + template<typename _Tp> + inline typename __promote<_Tp>::__type + comp_ellint_2(_Tp __k) + { + typedef typename __promote<_Tp>::__type __type; + return __detail::__comp_ellint_2<__type>(__k); + } + + + // 5.2.1.6 Complete elliptic interals of the third kind. + + inline float + comp_ellint_3f(float __k, float __nu) + { return __detail::__comp_ellint_3<float>(__k, __nu); } + + inline long double + comp_ellint_3l(long double __k, long double __nu) + { return __detail::__comp_ellint_3<long double>(__k, __nu); } + + template<typename _Tp, typename _Tpn> + inline typename __promote_2<_Tp, _Tpn>::__type + comp_ellint_3(_Tp __k, _Tpn __nu) + { + typedef typename __promote_2<_Tp, _Tpn>::__type __type; + return __detail::__comp_ellint_3<__type>(__k, __nu); + } + + + // 5.2.1.7 Confluent hypergeometric functions. + + inline float + conf_hypergf(float __a, float __c, float __x) + { return __detail::__conf_hyperg<float>(__a, __c, __x); } + + inline long double + conf_hypergl(long double __a, long double __c, long double __x) + { return __detail::__conf_hyperg<long double>(__a, __c, __x); } + + template<typename _Tpa, typename _Tpc, typename _Tp> + inline typename __promote_3<_Tpa, _Tpc, _Tp>::__type + conf_hyperg(_Tpa __a, _Tpc __c, _Tp __x) + { + typedef typename __promote_3<_Tpa, _Tpc, _Tp>::__type __type; + return __detail::__conf_hyperg<__type>(__a, __c, __x); + } + + + // 5.2.1.8 Regular modified cylindrical Bessel functions. + + inline float + cyl_bessel_if(float __nu, float __x) + { return __detail::__cyl_bessel_i<float>(__nu, __x); } + + inline long double + cyl_bessel_il(long double __nu, long double __x) + { return __detail::__cyl_bessel_i<long double>(__nu, __x); } + + template<typename _Tpnu, typename _Tp> + inline typename __promote_2<_Tpnu, _Tp>::__type + cyl_bessel_i(_Tpnu __nu, _Tp __x) + { + typedef typename __promote_2<_Tpnu, _Tp>::__type __type; + return __detail::__cyl_bessel_i<__type>(__nu, __x); + } + + + // 5.2.1.9 Cylindrical Bessel functions (of the first kind). + + inline float + cyl_bessel_jf(float __nu, float __x) + { return __detail::__cyl_bessel_j<float>(__nu, __x); } + + inline long double + cyl_bessel_jl(long double __nu, long double __x) + { return __detail::__cyl_bessel_j<long double>(__nu, __x); } + + template<typename _Tpnu, typename _Tp> + inline typename __promote_2<_Tpnu, _Tp>::__type + cyl_bessel_j(_Tpnu __nu, _Tp __x) + { + typedef typename __promote_2<_Tpnu, _Tp>::__type __type; + return __detail::__cyl_bessel_j<__type>(__nu, __x); + } + + + // 5.2.1.10 Irregular modified cylindrical Bessel functions. + + inline float + cyl_bessel_kf(float __nu, float __x) + { return __detail::__cyl_bessel_k<float>(__nu, __x); } + + inline long double + cyl_bessel_kl(long double __nu, long double __x) + { return __detail::__cyl_bessel_k<long double>(__nu, __x); } + + template<typename _Tpnu, typename _Tp> + inline typename __promote_2<_Tpnu, _Tp>::__type + cyl_bessel_k(_Tpnu __nu, _Tp __x) + { + typedef typename __promote_2<_Tpnu, _Tp>::__type __type; + return __detail::__cyl_bessel_k<__type>(__nu, __x); + } + + + // 5.2.1.11 Cylindrical Neumann functions. + + inline float + cyl_neumannf(float __nu, float __x) + { return __detail::__cyl_neumann_n<float>(__nu, __x); } + + inline long double + cyl_neumannl(long double __nu, long double __x) + { return __detail::__cyl_neumann_n<long double>(__nu, __x); } + + template<typename _Tpnu, typename _Tp> + inline typename __promote_2<_Tpnu, _Tp>::__type + cyl_neumann(_Tpnu __nu, _Tp __x) + { + typedef typename __promote_2<_Tpnu, _Tp>::__type __type; + return __detail::__cyl_neumann_n<__type>(__nu, __x); + } + + + // 5.2.1.12 Incomplete elliptic interals of the first kind. + + inline float + ellint_1f(float __k, float __phi) + { return __detail::__ellint_1<float>(__k, __phi); } + + inline long double + ellint_1l(long double __k, long double __phi) + { return __detail::__ellint_1<long double>(__k, __phi); } + + template<typename _Tp, typename _Tpp> + inline typename __promote_2<_Tp, _Tpp>::__type + ellint_1(_Tp __k, _Tpp __phi) + { + typedef typename __promote_2<_Tp, _Tpp>::__type __type; + return __detail::__ellint_1<__type>(__k, __phi); + } + + + // 5.2.1.13 Incomplete elliptic interals of the second kind. + + inline float + ellint_2f(float __k, float __phi) + { return __detail::__ellint_2<float>(__k, __phi); } + + inline long double + ellint_2l(long double __k, long double __phi) + { return __detail::__ellint_2<long double>(__k, __phi); } + + template<typename _Tp, typename _Tpp> + inline typename __promote_2<_Tp, _Tpp>::__type + ellint_2(_Tp __k, _Tpp __phi) + { + typedef typename __promote_2<_Tp, _Tpp>::__type __type; + return __detail::__ellint_2<__type>(__k, __phi); + } + + + // 5.2.1.14 Incomplete elliptic interals of the third kind. + + inline float + ellint_3f(float __k, float __nu, float __phi) + { return __detail::__ellint_3<float>(__k, __nu, __phi); } + + inline long double + ellint_3l(long double __k, long double __nu, long double __phi) + { return __detail::__ellint_3<long double>(__k, __nu, __phi); } + + template<typename _Tp, typename _Tpn, typename _Tpp> + inline typename __promote_3<_Tp, _Tpn, _Tpp>::__type + ellint_3(_Tp __k, _Tpn __nu, _Tpp __phi) + { + typedef typename __promote_3<_Tp, _Tpn, _Tpp>::__type __type; + return __detail::__ellint_3<__type>(__k, __nu, __phi); + } + + + // 5.2.1.15 Exponential integrals. + + inline float + expintf(float __x) + { return __detail::__expint<float>(__x); } + + inline long double + expintl(long double __x) + { return __detail::__expint<long double>(__x); } + + template<typename _Tp> + inline typename __promote<_Tp>::__type + expint(_Tp __x) + { + typedef typename __promote<_Tp>::__type __type; + return __detail::__expint<__type>(__x); + } + + + // 5.2.1.16 Hermite polynomials. + + inline float + hermitef(unsigned int __n, float __x) + { return __detail::__poly_hermite<float>(__n, __x); } + + inline long double + hermitel(unsigned int __n, long double __x) + { return __detail::__poly_hermite<long double>(__n, __x); } + + template<typename _Tp> + inline typename __promote<_Tp>::__type + hermite(unsigned int __n, _Tp __x) + { + typedef typename __promote<_Tp>::__type __type; + return __detail::__poly_hermite<__type>(__n, __x); + } + + + // 5.2.1.17 Hypergeometric functions. + + inline float + hypergf(float __a, float __b, float __c, float __x) + { return __detail::__hyperg<float>(__a, __b, __c, __x); } + + inline long double + hypergl(long double __a, long double __b, long double __c, long double __x) + { return __detail::__hyperg<long double>(__a, __b, __c, __x); } + + template<typename _Tpa, typename _Tpb, typename _Tpc, typename _Tp> + inline typename __promote_4<_Tpa, _Tpb, _Tpc, _Tp>::__type + hyperg(_Tpa __a, _Tpb __b, _Tpc __c, _Tp __x) + { + typedef typename __promote_4<_Tpa, _Tpb, _Tpc, _Tp>::__type __type; + return __detail::__hyperg<__type>(__a, __b, __c, __x); + } + + + // 5.2.1.18 Laguerre polynomials. + + inline float + laguerref(unsigned int __n, float __x) + { return __detail::__laguerre<float>(__n, __x); } + + inline long double + laguerrel(unsigned int __n, long double __x) + { return __detail::__laguerre<long double>(__n, __x); } + + template<typename _Tp> + inline typename __promote<_Tp>::__type + laguerre(unsigned int __n, _Tp __x) + { + typedef typename __promote<_Tp>::__type __type; + return __detail::__laguerre<__type>(__n, __x); + } + + + // 5.2.1.19 Legendre polynomials. + + inline float + legendref(unsigned int __n, float __x) + { return __detail::__poly_legendre_p<float>(__n, __x); } + + inline long double + legendrel(unsigned int __n, long double __x) + { return __detail::__poly_legendre_p<long double>(__n, __x); } + + template<typename _Tp> + inline typename __promote<_Tp>::__type + legendre(unsigned int __n, _Tp __x) + { + typedef typename __promote<_Tp>::__type __type; + return __detail::__poly_legendre_p<__type>(__n, __x); + } + + + // 5.2.1.20 Riemann zeta function. + + inline float + riemann_zetaf(float __x) + { return __detail::__riemann_zeta<float>(__x); } + + inline long double + riemann_zetal(long double __x) + { return __detail::__riemann_zeta<long double>(__x); } + + template<typename _Tp> + inline typename __promote<_Tp>::__type + riemann_zeta(_Tp __x) + { + typedef typename __promote<_Tp>::__type __type; + return __detail::__riemann_zeta<__type>(__x); + } + + + // 5.2.1.21 Spherical Bessel functions. + + inline float + sph_besself(unsigned int __n, float __x) + { return __detail::__sph_bessel<float>(__n, __x); } + + inline long double + sph_bessell(unsigned int __n, long double __x) + { return __detail::__sph_bessel<long double>(__n, __x); } + + template<typename _Tp> + inline typename __promote<_Tp>::__type + sph_bessel(unsigned int __n, _Tp __x) + { + typedef typename __promote<_Tp>::__type __type; + return __detail::__sph_bessel<__type>(__n, __x); + } + + + // 5.2.1.22 Spherical associated Legendre functions. + + inline float + sph_legendref(unsigned int __l, unsigned int __m, float __theta) + { return __detail::__sph_legendre<float>(__l, __m, __theta); } + + inline long double + sph_legendrel(unsigned int __l, unsigned int __m, long double __theta) + { return __detail::__sph_legendre<long double>(__l, __m, __theta); } + + template<typename _Tp> + inline typename __promote<_Tp>::__type + sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta) + { + typedef typename __promote<_Tp>::__type __type; + return __detail::__sph_legendre<__type>(__l, __m, __theta); + } + + + // 5.2.1.23 Spherical Neumann functions. + + inline float + sph_neumannf(unsigned int __n, float __x) + { return __detail::__sph_neumann<float>(__n, __x); } + + inline long double + sph_neumannl(unsigned int __n, long double __x) + { return __detail::__sph_neumann<long double>(__n, __x); } + + template<typename _Tp> + inline typename __promote<_Tp>::__type + sph_neumann(unsigned int __n, _Tp __x) + { + typedef typename __promote<_Tp>::__type __type; + return __detail::__sph_neumann<__type>(__n, __x); + } + + /* @} */ // group tr1_math_spec_func + +_GLIBCXX_END_NAMESPACE +} + #endif |