![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
C99 and C++ TR1 C-style FunctionsBoost , Math Toolkit 2.5.0 , Chapter 1. Overview
|
![]() |
Note |
---|---|
Отдельные библиотеки необходимытолько, если вы решите использовать boost/math/tr1.hpp, а не какой-либо другой Boost. Математический заголовок, остальная часть Boost. Математика остается только заголовком. |
Отдельные библиотеки, необходимые для использования tr1.hpp, могут быть скомпилированы с использованием bjam из каталога libs/math/build или из корневого каталога Boost с использованием обычной процедуры установки Boost. В качестве альтернативы исходные файлы расположены в libs/math/src, и каждый из них имеет то же имя, что и функция, которую они реализуют. Различные библиотеки называются следующим образом:
Имя |
Тип |
Функции |
---|---|---|
boost_math_c99f- |
плавать |
Функции C99 |
boost_math_c99- |
Двойной |
Функции C99 |
boost_math_c99l- |
Длинный двойной |
Функции C99 |
boost_math_tr1f- |
плавать |
Функции TR1 |
boost_math_tr1- |
Двойной |
Функции TR1 |
boost_math_tr1l- |
Длинный двойной |
Функции TR1 |
Там, где<<suffix>
>кодирует компилятор и опции сборки, используемые для создания библиотек: например, «libboost_math_tr1-vc80-mt-gd.lib» будет статически связанной библиотекой TR1 для использования с Visual C++ 8.0, в режиме многопоточности отладки, со временем выполнения DLL VC++, где как «boost_math_tr1-vc80-mt.lib» будет библиотека импорта для TR1 DLL, который будет использоваться с Visual C++ 8.0 с выпуском многопоточного времени выполнения DLL VC++. Ссылайтесь на руководство для началаполного объяснения<<suffix>
>значений.
![]() |
Note |
---|---|
Пользователи Visual C++, как правило, имеют правильный вариант библиотеки, чтобы связать выбранный для них с помощью boost/math/tr1.hpp на основе настроек компилятора. Пользователи должны будут определить BOOST_MATH_TR1_DYN_LINK при создании своего кода, если они хотят ссылаться на версии DLL этих библиотек, а не на статические версии. Пользователи могут отключить автоссылку, определив BOOST_MATH_TR1_NO_LIB При строительстве: это обычно используется только при соединении с настраиваемой сборкой библиотек. |
![]() |
Note |
---|---|
Пользователи Linux и Unix, как правило, устанавливают только один вариант этих библиотек и могут просто ссылаться на -lboost_math_tr1 и т. Д. |
Эта библиотека предоставляет пользователю выбор:
Какой вариант вы выберете, во многом зависит от того, как вы предпочитаете работать и как настроена ваша система.
Например, случайный пользователь, которому просто нужна функция acosh, вероятно, будет лучше включить<<boost/math/special_functions/acosh.hpp>
>и использовать<boost::math::acosh(x)
>в своем коде.
Однако для крупномасштабной разработки программного обеспечения, где время компиляции значительно, и где библиотеки Boost уже построены и установлены в системе, тогда включение<<boost/math/tr1.hpp>
>и использование<boost::math::tr1::acosh(x)
>ускорит время компиляции, уменьшит размеры объектных файлов (поскольку больше нет шаблонов), а также ускорит отладку времени выполнения - поскольку библиотеки, скомпилированные извне, могут быть оптимизированы компилятором, а не построены с использованием полных настроек - разница в производительности между сборками выпускаи отладки может быть до 20 раз, поэтому для сложных приложений это может быть большим выигрышем.
См. такжекраткое справочное руководство по этим функциям.
namespace boost{ namespace math{ namespace tr1{ extern "C"{ typedef unspecified float_t; typedef unspecified double_t; double acosh(double x); float acoshf(float x); long double acoshl(long double x); double asinh(double x); float asinhf(float x); long double asinhl(long double x); double atanh(double x); float atanhf(float x); long double atanhl(long double x); double cbrt(double x); float cbrtf(float x); long double cbrtl(long double x); double copysign(double x, double y); float copysignf(float x, float y); long double copysignl(long double x, long double y); double erf(double x); float erff(float x); long double erfl(long double x); double erfc(double x); float erfcf(float x); long double erfcl(long double x); double expm1(double x); float expm1f(float x); long double expm1l(long double x); double fmax(double x, double y); float fmaxf(float x, float y); long double fmaxl(long double x, long double y); double fmin(double x, double y); float fminf(float x, float y); long double fminl(long double x, long double y); double hypot(double x, double y); float hypotf(float x, float y); long double hypotl(long double x, long double y); double lgamma(double x); float lgammaf(float x); long double lgammal(long double x); long long llround(double x); long long llroundf(float x); long long llroundl(long double x); double log1p(double x); float log1pf(float x); long double log1pl(long double x); long lround(double x); long lroundf(float x); long lroundl(long double x); double nextafter(double x, double y); float nextafterf(float x, float y); long double nextafterl(long double x, long double y); double nexttoward(double x, long double y); float nexttowardf(float x, long double y); long double nexttowardl(long double x, long double y); double round(double x); float roundf(float x); long double roundl(long double x); double tgamma(double x); float tgammaf(float x); long double tgammal(long double x); double trunc(double x); float truncf(float x); long double truncl(long double x); }}}} // namespaces
См. такжекраткое справочное руководство по этим функциям.
namespace boost{ namespace math{ namespace tr1{ extern "C"{ // [5.2.1.1] associated Laguerre polynomials: double assoc_laguerre(unsigned n, unsigned m, double x); float assoc_laguerref(unsigned n, unsigned m, float x); long double assoc_laguerrel(unsigned n, unsigned m, long double x); // [5.2.1.2] associated Legendre functions: double assoc_legendre(unsigned l, unsigned m, double x); float assoc_legendref(unsigned l, unsigned m, float x); long double assoc_legendrel(unsigned l, unsigned m, long double x); // [5.2.1.3] beta function: double beta(double x, double y); float betaf(float x, float y); long double betal(long double x, long double y); // [5.2.1.4] (complete) elliptic integral of the first kind: double comp_ellint_1(double k); float comp_ellint_1f(float k); long double comp_ellint_1l(long double k); // [5.2.1.5] (complete) elliptic integral of the second kind: double comp_ellint_2(double k); float comp_ellint_2f(float k); long double comp_ellint_2l(long double k); // [5.2.1.6] (complete) elliptic integral of the third kind: double comp_ellint_3(double k, double nu); float comp_ellint_3f(float k, float nu); long double comp_ellint_3l(long double k, long double nu); // [5.2.1.8] regular modified cylindrical Bessel functions: double cyl_bessel_i(double nu, double x); float cyl_bessel_if(float nu, float x); long double cyl_bessel_il(long double nu, long double x); // [5.2.1.9] cylindrical Bessel functions (of the first kind): double cyl_bessel_j(double nu, double x); float cyl_bessel_jf(float nu, float x); long double cyl_bessel_jl(long double nu, long double x); // [5.2.1.10] irregular modified cylindrical Bessel functions: double cyl_bessel_k(double nu, double x); float cyl_bessel_kf(float nu, float x); long double cyl_bessel_kl(long double nu, long double x); // [5.2.1.11] cylindrical Neumann functions; // cylindrical Bessel functions (of the second kind): double cyl_neumann(double nu, double x); float cyl_neumannf(float nu, float x); long double cyl_neumannl(long double nu, long double x); // [5.2.1.12] (incomplete) elliptic integral of the first kind: double ellint_1(double k, double phi); float ellint_1f(float k, float phi); long double ellint_1l(long double k, long double phi); // [5.2.1.13] (incomplete) elliptic integral of the second kind: double ellint_2(double k, double phi); float ellint_2f(float k, float phi); long double ellint_2l(long double k, long double phi); // [5.2.1.14] (incomplete) elliptic integral of the third kind: double ellint_3(double k, double nu, double phi); float ellint_3f(float k, float nu, float phi); long double ellint_3l(long double k, long double nu, long double phi); // [5.2.1.15] exponential integral: double expint(double x); float expintf(float x); long double expintl(long double x); // [5.2.1.16] Hermite polynomials: double hermite(unsigned n, double x); float hermitef(unsigned n, float x); long double hermitel(unsigned n, long double x); // [5.2.1.18] Laguerre polynomials: double laguerre(unsigned n, double x); float laguerref(unsigned n, float x); long double laguerrel(unsigned n, long double x); // [5.2.1.19] Legendre polynomials: double legendre(unsigned l, double x); float legendref(unsigned l, float x); long double legendrel(unsigned l, long double x); // [5.2.1.20] Riemann zeta function: double riemann_zeta(double); float riemann_zetaf(float); long double riemann_zetal(long double); // [5.2.1.21] spherical Bessel functions (of the first kind): double sph_bessel(unsigned n, double x); float sph_besself(unsigned n, float x); long double sph_bessell(unsigned n, long double x); // [5.2.1.22] spherical associated Legendre functions: double sph_legendre(unsigned l, unsigned m, double theta); float sph_legendref(unsigned l, unsigned m, float theta); long double sph_legendrel(unsigned l, unsigned m, long double theta); // [5.2.1.23] spherical Neumann functions; // spherical Bessel functions (of the second kind): double sph_neumann(unsigned n, double x); float sph_neumannf(unsigned n, float x); long double sph_neumannl(unsigned n, long double x); }}}} // namespaces
Кроме того, предусмотрены достаточные дополнительные перегрузки<double
>версий вышеуказанных функций, так что вызов функции с любой смесью<float
>,<double
>,<long
double
>илицелых чиселаргументов поддерживается, причем тип возврата определяется правилами расчетатипа результата.
double exp2(double x); float exp2f(float x); long double exp2l(long double x); double fdim(double x, double y); float fdimf(float x, float y); long double fdiml(long double x, long double y); double fma(double x, double y, double z); float fmaf(float x, float y, float z); long double fmal(long double x, long double y, long double z); int ilogb(double x); int ilogbf(float x); int ilogbl(long double x); long long llrint(double x); long long llrintf(float x); long long llrintl(long double x); double log2(double x); float log2f(float x); long double log2l(long double x); double logb(double x); float logbf(float x); long double logbl(long double x); long lrint(double x); long lrintf(float x); long lrintl(long double x); double nan(const char *str); float nanf(const char *str); long double nanl(const char *str); double nearbyint(double x); float nearbyintf(float x); long double nearbyintl(long double x); double remainder(double x, double y); float remainderf(float x, float y); long double remainderl(long double x, long double y); double remquo(double x, double y, int *pquo); float remquof(float x, float y, int *pquo); long double remquol(long double x, long double y, int *pquo); double rint(double x); float rintf(float x); long double rintl(long double x); double scalbln(double x, long ex); float scalblnf(float x, long ex); long double scalblnl(long double x, long ex); double scalbn(double x, int ex); float scalbnf(float x, int ex); long double scalbnl(long double x, int ex);
// [5.2.1.7] confluent hypergeometric functions: double conf_hyperg(double a, double c, double x); float conf_hypergf(float a, float c, float x); long double conf_hypergl(long double a, long double c, long double x); // [5.2.1.17] hypergeometric functions: double hyperg(double a, double b, double c, double x); float hypergf(float a, float b, float c, float x); long double hypergl(long double a, long double b, long double c, long double x);
Статья C99 and C++ TR1 C-style Functions раздела Math Toolkit 2.5.0 Chapter 1. Overview может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 1. Overview ::
реклама |