math_fwd.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 1,055 行 · 第 1/3 页

HPP
1,055
字号
// math_fwd.hpp// TODO revise completely for new distribution classes.// Copyright Paul A. Bristow 2006.// Copyright John Maddock 2006.// Use, modification and distribution are subject to the// Boost Software License, Version 1.0.// (See accompanying file LICENSE_1_0.txt// or copy at http://www.boost.org/LICENSE_1_0.txt)// Omnibus list of forward declarations of math special functions.// IT = Integer type.// RT = Real type (built-in floating-point types, float, double, long double) & User Defined Types// AT = Integer or Real type #ifndef BOOST_MATH_SPECIAL_MATH_FWD_HPP#define BOOST_MATH_SPECIAL_MATH_FWD_HPP#ifdef _MSC_VER#pragma once#endif#include <boost/math/special_functions/detail/round_fwd.hpp>#include <boost/math/tools/promotion.hpp> // for argument promotion.#include <boost/math/policies/policy.hpp>#include <boost/mpl/comparison.hpp>#include <boost/config/no_tr1/complex.hpp>#define BOOST_NO_MACRO_EXPAND /**/namespace boost{   namespace math   { // Math functions (in roughly alphabetic order).   // Beta functions.   template <class RT1, class RT2>   typename tools::promote_args<RT1, RT2>::type          beta(RT1 a, RT2 b); // Beta function (2 arguments).   template <class RT1, class RT2, class A>   typename tools::promote_args<RT1, RT2, A>::type          beta(RT1 a, RT2 b, A x); // Beta function (3 arguments).   template <class RT1, class RT2, class RT3, class Policy>   typename tools::promote_args<RT1, RT2, RT3>::type          beta(RT1 a, RT2 b, RT3 x, const Policy& pol); // Beta function (3 arguments).   template <class RT1, class RT2, class RT3>   typename tools::promote_args<RT1, RT2, RT3>::type          betac(RT1 a, RT2 b, RT3 x);   template <class RT1, class RT2, class RT3, class Policy>   typename tools::promote_args<RT1, RT2, RT3>::type          betac(RT1 a, RT2 b, RT3 x, const Policy& pol);   template <class RT1, class RT2, class RT3>   typename tools::promote_args<RT1, RT2, RT3>::type          ibeta(RT1 a, RT2 b, RT3 x); // Incomplete beta function.   template <class RT1, class RT2, class RT3, class Policy>   typename tools::promote_args<RT1, RT2, RT3>::type          ibeta(RT1 a, RT2 b, RT3 x, const Policy& pol); // Incomplete beta function.   template <class RT1, class RT2, class RT3>   typename tools::promote_args<RT1, RT2, RT3>::type          ibetac(RT1 a, RT2 b, RT3 x); // Incomplete beta complement function.   template <class RT1, class RT2, class RT3, class Policy>   typename tools::promote_args<RT1, RT2, RT3>::type          ibetac(RT1 a, RT2 b, RT3 x, const Policy& pol); // Incomplete beta complement function.   template <class T1, class T2, class T3, class T4>   typename tools::promote_args<T1, T2, T3, T4>::type           ibeta_inv(T1 a, T2 b, T3 p, T4* py);   template <class T1, class T2, class T3, class T4, class Policy>   typename tools::promote_args<T1, T2, T3, T4>::type           ibeta_inv(T1 a, T2 b, T3 p, T4* py, const Policy& pol);   template <class RT1, class RT2, class RT3>   typename tools::promote_args<RT1, RT2, RT3>::type          ibeta_inv(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.   template <class RT1, class RT2, class RT3, class Policy>   typename tools::promote_args<RT1, RT2, RT3>::type          ibeta_inv(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.   template <class RT1, class RT2, class RT3>   typename tools::promote_args<RT1, RT2, RT3>::type          ibeta_inva(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.   template <class RT1, class RT2, class RT3, class Policy>   typename tools::promote_args<RT1, RT2, RT3>::type          ibeta_inva(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.   template <class RT1, class RT2, class RT3>   typename tools::promote_args<RT1, RT2, RT3>::type          ibeta_invb(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.   template <class RT1, class RT2, class RT3, class Policy>   typename tools::promote_args<RT1, RT2, RT3>::type          ibeta_invb(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.   template <class T1, class T2, class T3, class T4>   typename tools::promote_args<T1, T2, T3, T4>::type          ibetac_inv(T1 a, T2 b, T3 q, T4* py);   template <class T1, class T2, class T3, class T4, class Policy>   typename tools::promote_args<T1, T2, T3, T4>::type          ibetac_inv(T1 a, T2 b, T3 q, T4* py, const Policy& pol);   template <class RT1, class RT2, class RT3>   typename tools::promote_args<RT1, RT2, RT3>::type          ibetac_inv(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.   template <class RT1, class RT2, class RT3, class Policy>   typename tools::promote_args<RT1, RT2, RT3>::type          ibetac_inv(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.   template <class RT1, class RT2, class RT3>   typename tools::promote_args<RT1, RT2, RT3>::type          ibetac_inva(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.   template <class RT1, class RT2, class RT3, class Policy>   typename tools::promote_args<RT1, RT2, RT3>::type          ibetac_inva(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.   template <class RT1, class RT2, class RT3>   typename tools::promote_args<RT1, RT2, RT3>::type          ibetac_invb(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.   template <class RT1, class RT2, class RT3, class Policy>   typename tools::promote_args<RT1, RT2, RT3>::type          ibetac_invb(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.   template <class RT1, class RT2, class RT3>   typename tools::promote_args<RT1, RT2, RT3>::type          ibeta_derivative(RT1 a, RT2 b, RT3 x);  // derivative of incomplete beta   template <class RT1, class RT2, class RT3, class Policy>   typename tools::promote_args<RT1, RT2, RT3>::type          ibeta_derivative(RT1 a, RT2 b, RT3 x, const Policy& pol);  // derivative of incomplete beta   // erf & erfc error functions.   template <class RT> // Error function.   typename tools::promote_args<RT>::type erf(RT z);   template <class RT, class Policy> // Error function.   typename tools::promote_args<RT>::type erf(RT z, const Policy&);   template <class RT>// Error function complement.   typename tools::promote_args<RT>::type erfc(RT z);   template <class RT, class Policy>// Error function complement.   typename tools::promote_args<RT>::type erfc(RT z, const Policy&);   template <class RT>// Error function inverse.   typename tools::promote_args<RT>::type erf_inv(RT z);   template <class RT, class Policy>// Error function inverse.   typename tools::promote_args<RT>::type erf_inv(RT z, const Policy& pol);   template <class RT>// Error function complement inverse.   typename tools::promote_args<RT>::type erfc_inv(RT z);   template <class RT, class Policy>// Error function complement inverse.   typename tools::promote_args<RT>::type erfc_inv(RT z, const Policy& pol);   // Polynomials:   template <class T1, class T2, class T3>   typename tools::promote_args<T1, T2, T3>::type          legendre_next(unsigned l, T1 x, T2 Pl, T3 Plm1);   template <class T>   typename tools::promote_args<T>::type          legendre_p(int l, T x);   template <class T, class Policy>   typename tools::promote_args<T>::type          legendre_p(int l, T x, const Policy& pol);   template <class T>   typename tools::promote_args<T>::type          legendre_q(unsigned l, T x);   template <class T, class Policy>   typename tools::promote_args<T>::type          legendre_q(unsigned l, T x, const Policy& pol);   template <class T1, class T2, class T3>   typename tools::promote_args<T1, T2, T3>::type          legendre_next(unsigned l, unsigned m, T1 x, T2 Pl, T3 Plm1);   template <class T>   typename tools::promote_args<T>::type          legendre_p(int l, int m, T x);   template <class T, class Policy>   typename tools::promote_args<T>::type          legendre_p(int l, int m, T x, const Policy& pol);   template <class T1, class T2, class T3>   typename tools::promote_args<T1, T2, T3>::type           laguerre_next(unsigned n, T1 x, T2 Ln, T3 Lnm1);   template <class T1, class T2, class T3>   typename tools::promote_args<T1, T2, T3>::type        laguerre_next(unsigned n, unsigned l, T1 x, T2 Pl, T3 Plm1);   template <class T>   typename tools::promote_args<T>::type       laguerre(unsigned n, T x);   template <class T, class Policy>   typename tools::promote_args<T>::type       laguerre(unsigned n, unsigned m, T x, const Policy& pol);   template <class T1, class T2>   struct laguerre_result   {      typedef typename mpl::if_<         policies::is_policy<T2>,         typename tools::promote_args<T1>::type,         typename tools::promote_args<T2>::type      >::type type;   };   template <class T1, class T2>   typename laguerre_result<T1, T2>::type       laguerre(unsigned n, T1 m, T2 x);   template <class T>   typename tools::promote_args<T>::type       hermite(unsigned n, T x);   template <class T, class Policy>   typename tools::promote_args<T>::type       hermite(unsigned n, T x, const Policy& pol);   template <class T1, class T2, class T3>   typename tools::promote_args<T1, T2, T3>::type       hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1);   template <class T1, class T2>   std::complex<typename tools::promote_args<T1, T2>::type>          spherical_harmonic(unsigned n, int m, T1 theta, T2 phi);   template <class T1, class T2, class Policy>   std::complex<typename tools::promote_args<T1, T2>::type>       spherical_harmonic(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);   template <class T1, class T2>   typename tools::promote_args<T1, T2>::type          spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi);   template <class T1, class T2, class Policy>   typename tools::promote_args<T1, T2>::type       spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);   template <class T1, class T2>   typename tools::promote_args<T1, T2>::type          spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi);   template <class T1, class T2, class Policy>   typename tools::promote_args<T1, T2>::type       spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);   // Elliptic integrals:   template <class T1, class T2, class T3>   typename tools::promote_args<T1, T2, T3>::type          ellint_rf(T1 x, T2 y, T3 z);   template <class T1, class T2, class T3, class Policy>   typename tools::promote_args<T1, T2, T3>::type          ellint_rf(T1 x, T2 y, T3 z, const Policy& pol);   template <class T1, class T2, class T3>   typename tools::promote_args<T1, T2, T3>::type          ellint_rd(T1 x, T2 y, T3 z);   template <class T1, class T2, class T3, class Policy>   typename tools::promote_args<T1, T2, T3>::type          ellint_rd(T1 x, T2 y, T3 z, const Policy& pol);   template <class T1, class T2>   typename tools::promote_args<T1, T2>::type          ellint_rc(T1 x, T2 y);   template <class T1, class T2, class Policy>   typename tools::promote_args<T1, T2>::type          ellint_rc(T1 x, T2 y, const Policy& pol);   template <class T1, class T2, class T3, class T4>   typename tools::promote_args<T1, T2, T3, T4>::type          ellint_rj(T1 x, T2 y, T3 z, T4 p);   template <class T1, class T2, class T3, class T4, class Policy>   typename tools::promote_args<T1, T2, T3, T4>::type          ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy& pol);   template <typename T>   typename tools::promote_args<T>::type ellint_2(T k);   template <class T1, class T2>   typename tools::promote_args<T1, T2>::type ellint_2(T1 k, T2 phi);   template <class T1, class T2, class Policy>   typename tools::promote_args<T1, T2>::type ellint_2(T1 k, T2 phi, const Policy& pol);   template <typename T>   typename tools::promote_args<T>::type ellint_1(T k);   template <class T1, class T2>   typename tools::promote_args<T1, T2>::type ellint_1(T1 k, T2 phi);   template <class T1, class T2, class Policy>   typename tools::promote_args<T1, T2>::type ellint_1(T1 k, T2 phi, const Policy& pol);   namespace detail{   template <class T, class U, class V>   struct ellint_3_result   {      typedef typename mpl::if_<         policies::is_policy<V>,         typename tools::promote_args<T, U>::type,         typename tools::promote_args<T, U, V>::type      >::type type;   };   } // namespace detail   template <class T1, class T2, class T3>   typename detail::ellint_3_result<T1, T2, T3>::type ellint_3(T1 k, T2 v, T3 phi);   template <class T1, class T2, class T3, class Policy>   typename tools::promote_args<T1, T2, T3>::type ellint_3(T1 k, T2 v, T3 phi, const Policy& pol);   template <class T1, class T2>   typename tools::promote_args<T1, T2>::type ellint_3(T1 k, T2 v);   // Factorial functions.   // Note: not for integral types, at present.   template <class RT>   struct max_factorial;   template <class RT>   RT factorial(unsigned int);   template <class RT, class Policy>   RT factorial(unsigned int, const Policy& pol);   template <class RT>   RT unchecked_factorial(unsigned int BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(RT)); 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?