[section:c99 C99 C Functions] [h4 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 In addition sufficient additional overloads of the `double` versions of the above functions are provided, so that calling the function with any mixture of `float`, `double`, `long double`, or /integer/ arguments is supported, with the return type determined by the __arg_promotion_rules. For example: acoshf(2.0f); // float version, returns float. acosh(2.0f); // also calls the float version and returns float. acosh(2.0); // double version, returns double. acoshl(2.0L); // long double version, returns a long double. acosh(2.0L); // also calls the long double version. acosh(2); // integer argument is treated as a double, returns double. [h4 Quick Reference] More detailed descriptions of these functions are available in the C99 standard. typedef unspecified float_t; typedef unspecified double_t; In this implementation `float_t` is the same as type `float`, and `double_t` the same as type `double` unless the preprocessor symbol FLT_EVAL_METHOD is defined, in which case these are set as follows: [table [[FLT_EVAL_METHOD][float_t][double_t]] [[0][float][double]] [[1][double][double]] [[2][long double][long double]] ] double acosh(double x); float acoshf(float x); long double acoshl(long double x); Returns the inverse hyperbolic cosine of /x/. See also __acosh for the full template (header only) version of this function. double asinh(double x); float asinhf(float x); long double asinhl(long double x); Returns the inverse hyperbolic sine of /x/. See also __asinh for the full template (header only) version of this function. double atanh(double x); float atanhf(float x); long double atanhl(long double x); Returns the inverse hyperbolic tangent of /x/. See also __atanh for the full template (header only) version of this function. double cbrt(double x); float cbrtf(float x); long double cbrtl(long double x); Returns the cubed root of /x/. See also __cbrt for the full template (header only) version of this function. double copysign(double x, double y); float copysignf(float x, float y); long double copysignl(long double x, long double y); Returns a value with the magnitude of /x/ and the sign of /y/. double erf(double x); float erff(float x); long double erfl(long double x); Returns the error function of /x/: [equation erf1] See also __erf for the full template (header only) version of this function. double erfc(double x); float erfcf(float x); long double erfcl(long double x); Returns the complementary error function of /x/ `1-erf(x)` without the loss of precision implied by the subtraction. See also __erfc for the full template (header only) version of this function. double expm1(double x); float expm1f(float x); long double expm1l(long double x); Returns `exp(x)-1` without the loss of precision implied by the subtraction. See also __expm1 for the full template (header only) version of this function. double fmax(double x, double y); float fmaxf(float x, float y); long double fmaxl(long double x, long double y); Returns the larger (most positive) of /x/ and /y/. double fmin(double x, double y); float fminf(float x, float y); long double fminl(long double x, long double y); Returns the smaller (most negative) of /x/ and /y/. double hypot(double x, double y); float hypotf(float x, float y); long double hypotl(long double x, long double y); Returns `sqrt(x*x + y*y)` without the danger of numeric overflow implied by that formulation. See also __hypot for the full template (header only) version of this function. double lgamma(double x); float lgammaf(float x); long double lgammal(long double x); Returns the log of the gamma function of /x/. [equation lgamm1] See also __lgamma for the full template (header only) version of this function. long long llround(double x); long long llroundf(float x); long long llroundl(long double x); Returns the value /x/ rounded to the nearest integer as a `long long`: equivalent to `floor(x + 0.5)` See also __llround for the full template (header only) version of this function. double log1p(double x); float log1pf(float x); long double log1pl(long double x); Returns the `log(x+1)` without the loss of precision implied by that formulation. See also __log1p for the full template (header only) version of this function. long lround(double x); long lroundf(float x); long lroundl(long double x); Returns the value /x/ rounded to the nearest integer as a `long`: equivalent to `floor(x + 0.5)` See also __lround for the full template (header only) version of this function. double nextafter(double x, double y); float nextafterf(float x, float y); long double nextafterl(long double x, long double y); Returns the next representable floating point number after /x/ in the direction of /y/, or /x/ if `x == y`. double nexttoward(double x, long double y); float nexttowardf(float x, long double y); long double nexttowardl(long double x, long double y); As `nextafter`, but with /y/ always expressed as a `long double`. double round(double x); float roundf(float x); long double roundl(long double x); Returns the value /x/ rounded to the nearest integer: equivalent to `floor(x + 0.5)` See also __round for the full template (header only) version of this function. double tgamma(double x); float tgammaf(float x); long double tgammal(long double x); Returns the gamma function of /x/: [equation gamm1] See also __tgamma for the full template (header only) version of this function. double trunc(double x); float truncf(float x); long double truncl(long double x); Returns /x/ truncated to the nearest integer. See also __trunc for the full template (header only) version of this function. See also [@http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf C99 ISO Standard] [endsect] [/ Copyright 2008 John Maddock and Paul A. Bristow. Distributed under 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). ]