Standard library header <cmath>
This header was originally in the C standard library as <math.h>.
This header is part of the numeric library.
Types | |
float_t (C++11) |
most efficient floating-point type at least as wide as float (typedef) |
double_t (C++11) |
most efficient floating-point type at least as wide as double (typedef) |
Macros | |
(C++11)(C++11) |
indicates the overflow value for float, double and long double respectively (macro constant) |
(C++11) |
evaluates to positive infinity or the value guaranteed to overflow a float (macro constant) |
(C++11) |
evaluates to a quiet NaN of type float (macro constant) |
(C++11)(C++11)(C++11) |
defines the error handling mechanism used by the common mathematical functions (macro constant) |
Classification | |
(C++11)(C++11)(C++11)(C++11)(C++11) |
indicates a floating-point category (macro constant) |
Functions | |
Basic operations | |
(C++11)(C++11) |
absolute value of a floating point value (|x|) (function) |
(C++11)(C++11) |
remainder of the floating point division operation (function) |
(C++11)(C++11)(C++11) |
signed remainder of the division operation (function) |
(C++11)(C++11)(C++11) |
signed remainder as well as the three last bits of the division operation (function) |
(C++11)(C++11)(C++11) |
fused multiply-add operation (function) |
(C++11)(C++11)(C++11) |
larger of two floating-point values (function) |
(C++11)(C++11)(C++11) |
smaller of two floating point values (function) |
(C++11)(C++11)(C++11) |
positive difference of two floating point values (max(0, x-y)) (function) |
(C++11)(C++11)(C++11) |
not-a-number (NaN) (function) |
Linear interpolation | |
(C++20) |
linear interpolation function (function) |
Exponential functions | |
(C++11)(C++11) |
returns e raised to the given power (ex) (function) |
(C++11)(C++11)(C++11) |
returns 2 raised to the given power (2x) (function) |
(C++11)(C++11)(C++11) |
returns e raised to the given power, minus 1 (ex-1) (function) |
(C++11)(C++11) |
computes natural (base e) logarithm (ln(x)) (function) |
(C++11)(C++11) |
computes common (base 10) logarithm (log10(x)) (function) |
(C++11)(C++11)(C++11) |
base 2 logarithm of the given number (log2(x)) (function) |
(C++11)(C++11)(C++11) |
natural logarithm (to base e) of 1 plus the given number (ln(1+x)) (function) |
Power functions | |
(C++11)(C++11) |
raises a number to the given power (xy) (function) |
(C++11)(C++11) |
computes square root (√x) (function) |
(C++11)(C++11)(C++11) |
computes cube root (3√x) (function) |
(C++11)(C++11)(C++11) |
computes hypotenuse √x2 +y2 and √x2 +y2 +z2 (since C++17) (function) |
Trigonometric functions | |
(C++11)(C++11) |
computes sine (sin(x)) (function) |
(C++11)(C++11) |
computes cosine (cos(x)) (function) |
(C++11)(C++11) |
computes tangent (tan(x)) (function) |
(C++11)(C++11) |
computes arc sine (arcsin(x)) (function) |
(C++11)(C++11) |
computes arc cosine (arccos(x)) (function) |
(C++11)(C++11) |
computes arc tangent (arctan(x)) (function) |
(C++11)(C++11) |
arc tangent, using signs to determine quadrants (function) |
Hyperbolic functions | |
(C++11)(C++11) |
computes hyperbolic sine (sinh(x)) (function) |
(C++11)(C++11) |
computes hyperbolic cosine (cosh(x)) (function) |
(C++11)(C++11) |
computes hyperbolic tangent (tanh(x)) (function) |
(C++11)(C++11)(C++11) |
computes the inverse hyperbolic sine (arsinh(x)) (function) |
(C++11)(C++11)(C++11) |
computes the inverse hyperbolic cosine (arcosh(x)) (function) |
(C++11)(C++11)(C++11) |
computes the inverse hyperbolic tangent (artanh(x)) (function) |
Error and gamma functions | |
(C++11)(C++11)(C++11) |
error function (function) |
(C++11)(C++11)(C++11) |
complementary error function (function) |
(C++11)(C++11)(C++11) |
gamma function (function) |
(C++11)(C++11)(C++11) |
natural logarithm of the gamma function (function) |
Nearest integer floating-point operations | |
(C++11)(C++11) |
nearest integer not less than the given value (function) |
(C++11)(C++11) |
nearest integer not greater than the given value (function) |
(C++11)(C++11)(C++11) |
nearest integer not greater in magnitude than the given value (function) |
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) |
nearest integer, rounding away from zero in halfway cases (function) |
(C++11)(C++11)(C++11) |
nearest integer using current rounding mode (function) |
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) |
nearest integer using current rounding mode with exception if the result differs (function) |
Floating-point manipulation functions | |
(C++11)(C++11) |
decomposes a number into significand and base-2 exponent (function) |
(C++11)(C++11) |
multiplies a number by 2 raised to an integral power (function) |
(C++11)(C++11) |
decomposes a number into integer and fractional parts (function) |
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) |
multiplies a number by FLT_RADIX raised to a power (function) |
(C++11)(C++11)(C++11) |
extracts exponent of the number (function) |
(C++11)(C++11)(C++11) |
extracts exponent of the number (function) |
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) |
next representable floating-point value towards the given value (function) |
(C++11)(C++11)(C++11) |
copies the sign of a floating point value (function) |
Classification and comparison | |
(C++11) |
categorizes the given floating-point value (function) |
(C++11) |
checks if the given number has finite value (function) |
(C++11) |
checks if the given number is infinite (function) |
(C++11) |
checks if the given number is NaN (function) |
(C++11) |
checks if the given number is normal (function) |
(C++11) |
checks if the given number is negative (function) |
(C++11) |
checks if the first floating-point argument is greater than the second (function) |
(C++11) |
checks if the first floating-point argument is greater or equal than the second (function) |
(C++11) |
checks if the first floating-point argument is less than the second (function) |
(C++11) |
checks if the first floating-point argument is less or equal than the second (function) |
(C++11) |
checks if the first floating-point argument is less or greater than the second (function) |
(C++11) |
checks if two floating-point values are unordered (function) |
Mathematical special functions | |
(C++17)(C++17)(C++17) |
associated Laguerre polynomials (function) |
(C++17)(C++17)(C++17) |
associated Legendre polynomials (function) |
(C++17)(C++17)(C++17) |
beta function (function) |
(C++17)(C++17)(C++17) |
(complete) elliptic integral of the first kind (function) |
(C++17)(C++17)(C++17) |
(complete) elliptic integral of the second kind (function) |
(C++17)(C++17)(C++17) |
(complete) elliptic integral of the third kind (function) |
(C++17)(C++17)(C++17) |
regular modified cylindrical Bessel functions (function) |
(C++17)(C++17)(C++17) |
cylindrical Bessel functions (of the first kind) (function) |
(C++17)(C++17)(C++17) |
irregular modified cylindrical Bessel functions (function) |
(C++17)(C++17)(C++17) |
cylindrical Neumann functions (function) |
(C++17)(C++17)(C++17) |
(incomplete) elliptic integral of the first kind (function) |
(C++17)(C++17)(C++17) |
(incomplete) elliptic integral of the second kind (function) |
(C++17)(C++17)(C++17) |
(incomplete) elliptic integral of the third kind (function) |
(C++17)(C++17)(C++17) |
exponential integral (function) |
(C++17)(C++17)(C++17) |
Hermite polynomials (function) |
(C++17)(C++17)(C++17) |
Legendre polynomials (function) |
(C++17)(C++17)(C++17) |
Laguerre polynomials (function) |
(C++17)(C++17)(C++17) |
Riemann zeta function (function) |
(C++17)(C++17)(C++17) |
spherical Bessel functions (of the first kind) (function) |
(C++17)(C++17)(C++17) |
spherical associated Legendre functions (function) |
(C++17)(C++17)(C++17) |
spherical Neumann functions (function) |
Synopsis
For each function with at least one parameter of type /* floating-point-type */, an overload for each cv-unqualified floating-point type is provided where all uses of /* floating-point-type */ in the function signature are replaced with that floating-point type.
For each function with at least one parameter of type /* floating-point-type */ other than std::abs, additional overloads are provided to ensure that, if every argument corresponding to a /* floating-point-type */ parameter has arithmetic type, then every such argument is effectively cast to the floating-point type with the greatest floating-point conversion rank and greatest floating-point conversion subrank among the types of all such arguments, where arguments of integer type are considered to have the same floating-point conversion rank as double. If no such floating-point type with the greatest rank and subrank exists, then overload resolution does not result in a usable candidate from the provided overloads.
namespace std {
using float_t = /* see description */;
using double_t = /* see description */;
}
#define HUGE_VAL /* see description */
#define HUGE_VALF /* see description */
#define HUGE_VALL /* see description */
#define INFINITY /* see description */
#define NAN /* see description */
#define FP_INFINITE /* see description */
#define FP_NAN /* see description */
#define FP_NORMAL /* see description */
#define FP_SUBNORMAL /* see description */
#define FP_ZERO /* see description */
#define FP_FAST_FMA /* see description */
#define FP_FAST_FMAF /* see description */
#define FP_FAST_FMAL /* see description */
#define FP_ILOGB0 /* see description */
#define FP_ILOGBNAN /* see description */
#define MATH_ERRNO /* see description */
#define MATH_ERREXCEPT /* see description */
#define math_errhandling /* see description */
namespace std {
/* floating-point-type */ acos(/* floating-point-type */ x);
float acosf(float x);
long double acosl(long double x);
/* floating-point-type */ asin(/* floating-point-type */ x);
float asinf(float x);
long double asinl(long double x);
/* floating-point-type */ atan(/* floating-point-type */ x);
float atanf(float x);
long double atanl(long double x);
/* floating-point-type */ atan2(/* floating-point-type */ y,
/* floating-point-type */ x);
float atan2f(float y, float x);
long double atan2l(long double y, long double x);
/* floating-point-type */ cos(/* floating-point-type */e x);
float cosf(float x);
long double cosl(long double x);
/* floating-point-type */ sin(/* floating-point-type */ x);
float sinf(float x);
long double sinl(long double x);
/* floating-point-type */ tan(/* floating-point-type */ x);
float tanf(float x);
long double tanl(long double x);
/* floating-point-type */ acosh(/* floating-point-type */ x);
float acoshf(float x);
long double acoshl(long double x);
/* floating-point-type */ asinh(/* floating-point-type */ x);
float asinhf(float x);
long double asinhl(long double x);
/* floating-point-type */ atanh(/* floating-point-type */ x);
float atanhf(float x);
long double atanhl(long double x);
/* floating-point-type */ cosh(/* floating-point-type */ x);
float coshf(float x);
long double coshl(long double x);
/* floating-point-type */ sinh(/* floating-point-type */ x);
float sinhf(float x);
long double sinhl(long double x);
/* floating-point-type */ tanh(/* floating-point-type */ x);
float tanhf(float x);
long double tanhl(long double x);
/* floating-point-type */ exp(/* floating-point-type */ x);
float expf(float x);
long double expl(long double x);
/* floating-point-type */ exp2(/* floating-point-type */ x);
float exp2f(float x);
long double exp2l(long double x);
/* floating-point-type */ expm1(/* floating-point-type */ x);
float expm1f(float x);
long double expm1l(long double x);
constexpr /* floating-point-type */ frexp(/* floating-point-type */ value, int* exp);
constexpr float frexpf(float value, int* exp);
constexpr long double frexpl(long double value, int* exp);
constexpr int ilogb(/* floating-point-type */ x);
constexpr int ilogbf(float x);
constexpr int ilogbl(long double x);
constexpr /* floating-point-type */ ldexp(/* floating-point-type */ x, int exp);
constexpr float ldexpf(float x, int exp);
constexpr long double ldexpl(long double x, int exp);
/* floating-point-type */ log(/* floating-point-type */ x);
float logf(float x);
long double logl(long double x);
/* floating-point-type */ log10(/* floating-point-type */ x);
float log10f(float x);
long double log10l(long double x);
/* floating-point-type */ log1p(/* floating-point-type */ x);
float log1pf(float x);
long double log1pl(long double x);
/* floating-point-type */ log2(/* floating-point-type */ x);
float log2f(float x);
long double log2l(long double x);
constexpr /* floating-point-type */ logb(/* floating-point-type */ x);
constexpr float logbf(float x);
constexpr long double logbl(long double x);
constexpr /* floating-point-type */ modf(/* floating-point-type */ value,
/* floating-point-type */* iptr);
constexpr float modff(float value, float* iptr);
constexpr long double modfl(long double value, long double* iptr);
constexpr /* floating-point-type */ scalbn(/* floating-point-type */ x, int n);
constexpr float scalbnf(float x, int n);
constexpr long double scalbnl(long double x, int n);
constexpr /* floating-point-type */ scalbln(/* floating-point-type */ x, long int n);
constexpr float scalblnf(float x, long int n);
constexpr long double scalblnl(long double x, long int n);
/* floating-point-type */ cbrt(/* floating-point-type */ x);
float cbrtf(float x);
long double cbrtl(long double x);
// absolute values
constexpr int abs(int j); // freestanding
constexpr long int abs(long int j); // freestanding
constexpr long long int abs(long long int j); // freestanding
constexpr /* floating-point-type */
abs(/* floating-point-type */ j); // freestanding-deleted
constexpr /* floating-point-type */ fabs(/* floating-point-type */ x);
constexpr float fabsf(float x);
constexpr long double fabsl(long double x);
/* floating-point-type */ hypot(/* floating-point-type */ x,
/* floating-point-type */ y);
float hypotf(float x, float y);
long double hypotl(long double x, long double y);
// three-dimensional hypotenuse
float hypot(/* floating-point-type */ x,
/* floating-point-type */ y,
/* floating-point-type */ z);
/* floating-point-type */ pow(/* floating-point-type */ x,
/* floating-point-type */ y);
float powf(float x, float y);
long double powl(long double x, long double y);
/* floating-point-type */ sqrt(/* floating-point-type */ x);
float sqrtf(float x);
long double sqrtl(long double x);
/* floating-point-type */ erf(/* floating-point-type */ x);
float erff(float x);
long double erfl(long double x);
/* floating-point-type */ erfc(/* floating-point-type */ x);
float erfcf(float x);
long double erfcl(long double x);
/* floating-point-type */ lgamma(/* floating-point-type */ x);
float lgammaf(float x);
long double lgammal(long double x);
/* floating-point-type */ tgamma(/* floating-point-type */ x);
float tgammaf(float x);
long double tgammal(long double x);
constexpr /* floating-point-type */ ceil(/* floating-point-type */ x);
constexpr float ceilf(float x);
constexpr long double ceill(long double x);
constexpr /* floating-point-type */ floor(/* floating-point-type */ x);
constexpr float floorf(float x);
constexpr long double floorl(long double x);
/* floating-point-type */ nearbyint(/* floating-point-type */ x);
float nearbyintf(float x);
long double nearbyintl(long double x);
/* floating-point-type */ rint(/* floating-point-type */ x);
float rintf(float x);
long double rintl(long double x);
long int lrint(/* floating-point-type */ x);
long int lrintf(float x);
long int lrintl(long double x);
long long int llrint(/* floating-point-type */ x);
long long int llrintf(float x);
long long int llrintl(long double x);
constexpr /* floating-point-type */ round(/* floating-point-type */ x);
constexpr float roundf(float x);
constexpr long double roundl(long double x);
constexpr long int lround(/* floating-point-type */ x);
constexpr long int lroundf(float x);
constexpr long int lroundl(long double x);
constexpr long long int llround(/* floating-point-type */ x);
constexpr long long int llroundf(float x);
constexpr long long int llroundl(long double x);
constexpr /* floating-point-type */ trunc(/* floating-point-type */ x);
constexpr float truncf(float x);
constexpr long double truncl(long double x);
constexpr /* floating-point-type */ fmod(/* floating-point-type */ x,
/* floating-point-type */ y);
constexpr float fmodf(float x, float y);
constexpr long double fmodl(long double x, long double y);
constexpr /* floating-point-type */ remainder(/* floating-point-type */ x,
/* floating-point-type */ y);
constexpr float remainderf(float x, float y);
constexpr long double remainderl(long double x, long double y);
constexpr /* floating-point-type */ remquo(/* floating-point-type */ x,
/* floating-point-type */ y, int* quo);
constexpr float remquof(float x, float y, int* quo);
constexpr long double remquol(long double x, long double y, int* quo);
constexpr /* floating-point-type */ copysign(/* floating-point-type */ x,
/* floating-point-type */ y);
constexpr float copysignf(float x, float y);
constexpr long double copysignl(long double x, long double y);
double nan(const char* tagp);
float nanf(const char* tagp);
long double nanl(const char* tagp);
constexpr /* floating-point-type */ nextafter(/* floating-point-type */ x,
/* floating-point-type */ y);
constexpr float nextafterf(float x, float y);
constexpr long double nextafterl(long double x, long double y);
constexpr /* floating-point-type */ nexttoward(/* floating-point-type */ x,
long double y);
constexpr float nexttowardf(float x, long double y);
constexpr long double nexttowardl(long double x, long double y);
constexpr /* floating-point-type */ fdim(/* floating-point-type */ x,
/* floating-point-type */ y);
constexpr float fdimf(float x, float y);
constexpr long double fdiml(long double x, long double y);
constexpr /* floating-point-type */ fmax(/* floating-point-type */ x,
/* floating-point-type */ y);
constexpr float fmaxf(float x, float y);
constexpr long double fmaxl(long double x, long double y);
constexpr /* floating-point-type */ fmin(/* floating-point-type */ x,
/* floating-point-type */ y);
constexpr float fminf(float x, float y);
constexpr long double fminl(long double x, long double y);
constexpr /* floating-point-type */ fma(/* floating-point-type */ x,
/* floating-point-type */ y,
/* floating-point-type */ z);
constexpr float fmaf(float x, float y, float z);
constexpr long double fmal(long double x, long double y, long double z);
// linear interpolation
constexpr /* floating-point-type */ lerp(/* floating-point-type */ a,
/* floating-point-type */ b,
/* floating-point-type */ t) noexcept;
// classification / comparison functions
constexpr int fpclassify(/* floating-point-type */ x);
constexpr bool isfinite(/* floating-point-type */ x);
constexpr bool isinf(/* floating-point-type */ x);
constexpr bool isnan(/* floating-point-type */ x);
constexpr bool isnormal(/* floating-point-type */ x);
constexpr bool signbit(/* floating-point-type */ x);
constexpr bool isgreater(/* floating-point-type */ x,
/* floating-point-type */ y);
constexpr bool isgreaterequal(/* floating-point-type */ x,
/* floating-point-type */ y);
constexpr bool isless(/* floating-point-type */ x,
/* floating-point-type */ y);
constexpr bool islessequal(/* floating-point-type */ x,
/* floating-point-type */ y);
constexpr bool islessgreater(/* floating-point-type */ x,
/* floating-point-type */ y);
constexpr bool isunordered(/* floating-point-type */ x,
/* floating-point-type */ y);
// mathematical special functions
// associated Laguerre polynomials
/* floating-point-type */ assoc_laguerre(unsigned n, unsigned m,
/* floating-point-type */ x);
float assoc_laguerref(unsigned n, unsigned m, float x);
long double assoc_laguerrel(unsigned n, unsigned m, long double x);
// associated Legendre functions
/* floating-point-type */ assoc_legendre(unsigned l, unsigned m,
/* floating-point-type */ x);
float assoc_legendref(unsigned l, unsigned m, float x);
long double assoc_legendrel(unsigned l, unsigned m, long double x);
// beta function
/* floating-point-type */ beta(/* floating-point-type */ x,
/* floating-point-type */ y);
float betaf(float x, float y);
long double betal(long double x, long double y);
// complete elliptic integral of the first kind
/* floating-point-type */ comp_ellint_1(/* floating-point-type */ k);
float comp_ellint_1f(float k);
long double comp_ellint_1l(long double k);
// complete elliptic integral of the second kind
/* floating-point-type */ comp_ellint_2(/* floating-point-type */ k);
float comp_ellint_2f(float k);
long double comp_ellint_2l(long double k);
// complete elliptic integral of the third kind
/* floating-point-type */ comp_ellint_3(/* floating-point-type */ k,
/* floating-point-type */ nu);
float comp_ellint_3f(float k, float nu);
long double comp_ellint_3l(long double k, long double nu);
// regular modified cylindrical Bessel functions
/* floating-point-type */ cyl_bessel_i(/* floating-point-type */ nu,
/* floating-point-type */ x);
float cyl_bessel_if(float nu, float x);
long double cyl_bessel_il(long double nu, long double x);
// cylindrical Bessel functions of the first kind
/* floating-point-type */ cyl_bessel_j(/* floating-point-type */ nu,
/* floating-point-type */ x);
float cyl_bessel_jf(float nu, float x);
long double cyl_bessel_jl(long double nu, long double x);
// irregular modified cylindrical Bessel functions
/* floating-point-type */ cyl_bessel_k(/* floating-point-type */ nu,
/* floating-point-type */ x);
float cyl_bessel_kf(float nu, float x);
long double cyl_bessel_kl(long double nu, long double x);
// cylindrical Neumann functions;
// cylindrical Bessel functions of the second kind
/* floating-point-type */ cyl_neumann(/* floating-point-type */ nu,
/* floating-point-type */ x);
float cyl_neumannf(float nu, float x);
long double cyl_neumannl(long double nu, long double x);
// incomplete elliptic integral of the first kind
/* floating-point-type */ ellint_1(/* floating-point-type */ k,
/* floating-point-type */ phi);
float ellint_1f(float k, float phi);
long double ellint_1l(long double k, long double phi);
// incomplete elliptic integral of the second kind
/* floating-point-type */ ellint_2(/* floating-point-type */ k,
/* floating-point-type */ phi);
float ellint_2f(float k, float phi);
long double ellint_2l(long double k, long double phi);
// incomplete elliptic integral of the third kind
/* floating-point-type */ ellint_3(/* floating-point-type */ k,
/* floating-point-type */ nu,
/* floating-point-type */ phi);
float ellint_3f(float k, float nu, float phi);
long double ellint_3l(long double k, long double nu, long double phi);
// exponential integral
/* floating-point-type */ expint(/* floating-point-type */ x);
float expintf(float x);
long double expintl(long double x);
// Hermite polynomials
/* floating-point-type */ hermite(unsigned n, /* floating-point-type */ x);
float hermitef(unsigned n, float x);
long double hermitel(unsigned n, long double x);
// Laguerre polynomials
/* floating-point-type */ laguerre(unsigned n, /* floating-point-type */ x);
float laguerref(unsigned n, float x);
long double laguerrel(unsigned n, long double x);
// Legendre polynomials
/* floating-point-type */ legendre(unsigned l, /* floating-point-type */ x);
float legendref(unsigned l, float x);
long double legendrel(unsigned l, long double x);
// Riemann zeta function
/* floating-point-type */ riemann_zeta(/* floating-point-type */ x);
float riemann_zetaf(float x);
long double riemann_zetal(long double x);
// spherical Bessel functions of the first kind
/* floating-point-type */ sph_bessel(unsigned n, /* floating-point-type */ x);
float sph_besself(unsigned n, float x);
long double sph_bessell(unsigned n, long double x);
// spherical associated Legendre functions
/* floating-point-type */ sph_legendre(unsigned l, unsigned m,
/* floating-point-type */ theta);
float sph_legendref(unsigned l, unsigned m, float theta);
long double sph_legendrel(unsigned l, unsigned m, long double theta);
// spherical Neumann functions;
// spherical Bessel functions of the second kind
/* floating-point-type */ sph_neumann(unsigned n, /* floating-point-type */ x);
float sph_neumannf(unsigned n, float x);
long double sph_neumannl(unsigned n, long double x);
}