Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

C99 and TR1 C Functions Overview

Boost , Math Toolkit 2.5.0 , Chapter 7. TR1 and C99 external "C" Functions

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Многие из специальных функций, включенных в эту библиотеку, также являются частью стандартаC99 ISO/IEC 9899:1999.илиТехнический отчет по расширениям библиотеки C++. Поэтому эта библиотека включает в себя тонкий заголовок обертки<boost/math/tr1.hpp>, который обеспечивает совместимость с этими двумя стандартами.

Существуют различные плюсы и минусы использования библиотеки таким образом:

Плюсы:

  • Заголовок для включения является легким (то есть быстрым для компиляции).
  • Функции имеют внешнюю связь «C», и поэтому могут использоваться на других языках (не только на C и C++).
  • C99 и C++ Стандартная совместимость TR1.

Минусы:

  • Вам нужно будет компилировать и ссылаться на внешний Boost. Математические библиотеки.
  • Ограниченная поддержка типов,<float>,<double>и<long double>.
  • Обработка ошибок осуществляется через настройку ::errno и возврат NaN и бесконечностей: это может быть менее гибким, чем подход, основанный на исключении C++.
[Note] 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] Note

Пользователи Visual C++, как правило, имеют правильный вариант библиотеки, чтобы связать выбранный для них с помощью boost/math/tr1.hpp на основе настроек компилятора.

Пользователи должны будут определить BOOST_MATH_TR1_DYN_LINK при создании своего кода, если они хотят ссылаться на версии DLL этих библиотек, а не на статические версии.

Пользователи могут отключить автоссылку, определив BOOST_MATH_TR1_NO_LIB При строительстве: это обычно используется только при соединении с настраиваемой сборкой библиотек.

[Note] Note

Пользователи Linux и Unix, как правило, устанавливают только один вариант этих библиотек и могут просто ссылаться на -lboost_math_tr1 и т. Д.

Usage Recomendations

Эта библиотека предоставляет пользователю выбор:

  • Включать в заголовок только версии функций и иметь более легкое время связывания, но более длительное время компиляции.
  • Включить заголовки TR1 и ссылку на внешнюю библиотеку.

Какой вариант вы выберете, во многом зависит от того, как вы предпочитаете работать и как настроена ваша система.

Например, случайный пользователь, которому просто нужна функция acosh, вероятно, будет лучше включить<<boost/math/special_functions/acosh.hpp>>и использовать<boost::math::acosh(x)>в своем коде.

Однако для крупномасштабной разработки программного обеспечения, где время компиляции значительно, и где библиотеки Boost уже построены и установлены в системе, тогда включение<<boost/math/tr1.hpp>>и использование<boost::math::tr1::acosh(x)>ускорит время компиляции, уменьшит размеры объектных файлов (поскольку больше нет шаблонов), а также ускорит отладку времени выполнения - поскольку библиотеки, скомпилированные извне, могут быть оптимизированы компилятором, а не построены с использованием полных настроек - разница в производительности между сборками выпускаи отладки может быть до 20 раз, поэтому для сложных приложений это может быть большим выигрышем.

Supported C99 Functions

См. такжекраткое справочное руководство по этим функциям.

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
Supported TR1 Functions

См. такжекраткое справочное руководство по этим функциям.

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>илицелых чиселаргументов поддерживается, причем тип возврата определяется правилами расчетатипа результата.

Currently Unsupported C99 Functions
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);
Currently Unsupported TR1 Functions
// [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);

PrevUpHomeNext

Статья C99 and TR1 C Functions Overview раздела Math Toolkit 2.5.0 Chapter 7. TR1 and C99 external "C" Functions может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 7. TR1 and C99 external "C" Functions ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:50:03/0.0083558559417725/1