math.h is a header file in the standard library of the C programming language designed for basic mathematical operations. Most of the functions involve the use of floating point numbers. C++ also implements these functions for compatibility reasons and declares them in the header cmath (the C99 functions are not available in the current C++ standard, C++ 98).

All functions that take or return an angle work in radians.

All functions take doubles for floating-point arguments, unless otherwise specified. In C99, to work with floats or long doubles, append an f or an l to the name, respectively.

Mathematical library functions that operate on integers, such as abs, labs, div, and ldiv, are instead specified in the stdlib.h header.

Pre-C99 functions

Name Description
acos inverse cosine
asin inverse sine
atan one-parameter inverse tangent
atan2 two-parameter inverse tangent
ceil ceiling, the smallest integer not less than parameter
cos cosine
cosh hyperbolic cosine
cbrt cube root
exp exponential function
fabs absolute value (of a floating-point number)
floor floor, the largest integer not greater than parameter
fmod floating-point remainder: x - y*(int)(x/y)
frexp break floating-point number down into mantissa and exponent
ldexp scale floating-point number by exponent (see article)
log natural logarithm
log10 base-10 logarithm
modf(x,p) returns fractional part of x and stores integral part where pointer p points to
pow(x,y) raise x to the power of y, xy
sin sine
sinh hyperbolic sine
sqrt square root
tan tangent
tanh hyperbolic tangent]]

(For functions to convert strings to floating point numbers (atof(), strtod(), etc.), see C Programming/C Reference/stdlib.h.)

(For functions to convert floating point numbers to strings (snprintf(), itoa(), etc.), see C Programming/C Reference/stdio.h and C_Programming/C_Reference/stdlib.h#itoa.)

C99 functions

Name Description
acosh inverse hyperbolic cosine
asinh inverse hyperbolic sine
atanh inverse hyperbolic tangent
cbrt cube root
copysign(x,y) returns the value of x with the sign of y
erf error function
erfc complementary error function
exp2(x) raise 2 to the power of x, 2x
expm1(x) one less than the exponential of x, ex − 1
fdim(x,y) positive difference between x and y, fmax(xy, 0)
fma(x,y,z) multiply and add, (x * y) + z
fmax(x,y) largest value of x and y
fmin(x,y) smallest value of x and y
hypot(x,y) hypotenuse, sqrt(x2 + y2)
ilogb the exponent of a floating-point value, converted to an int
lgamma natural log of the absolute value of the gamma function
llrint round to integer (returns long long) using current rounding mode
lrint round to integer (returns long) using current rounding mode
llround round to integer (returns long long)
lround round to integer (returns long)
log1p(x) natural logarithm of 1 + x
log2 base-2 logarithm
logb extract exponent from floating-point number
nan(s) returns NaN, possibly using string argument
nearbyint round floating-point number to nearest integer
nextafter(x,y) returns next representable value after x (towards y)
nexttoward(x,y) same as nextafter, except y is always a long double
remainder(x,y) calculates remainder, as required by IEC 60559
remquo(x,y,p) same as remainder, but store quotient (as int) at target of pointer p
rint round to integer (returns double) using current rounding mode
round round to integer (returns double), rounding halfway cases away from zero
scalbln(x,n) x * FLT_RADIXn (n is long)
scalbn(x,n) x * FLT_RADIXn (n is int)
tgamma gamma function
trunc truncate floating-point number

XSI Extensions


Extra functions may be available as X/Open System Interfaces Extensions. These are not present in any ANSI or ISO C standard.

Name Description
j0(x) Bessel function of x of the first kind of order 0
j1(x) Bessel function of x of the first kind of order 1
jn(n,x) Bessel function of x of the first kind of order n
scalb(x,y) x * FLT_RADIXy (x and y are doubles)
y0(x) Bessel function of x of the second kind of order 0
y1(x) Bessel function of x of the second kind of order 1
yn(n,x) Bessel function of x of the second kind of order n

The double-to-string conversion functions ecvt, fcvt and gcvt have been deprecated in favour of sprintf.

Mathematical constants (not standard)

Name Description
M_E The base of natural logarithms.
M_LOG2E The logarithm to base 2 of M_E.
M_LOG10E The logarithm to base 10 of M_E.
M_LN2 The natural logarithm of 2.
M_LN10 The natural logarithm of 10.
M_PI Pi, the ratio of a circle's circumference to its diameter.
M_PI_2 Pi divided by two.
M_PI_4 Pi divided by four.
M_1_PI The reciprocal of pi (1/pi).
M_2_PI Two times the reciprocal of pi.
M_2_SQRTPI Two times the reciprocal of the square root of pi.
M_SQRT2 The square root of two.
M_SQRT1_2 The reciprocal of the square root of two (also the square root of 1/2).

All values are of type double. As an extension, the GNU C library also defines these constants with type long double. The long double macros have a lowercase ‘l’ appended to their names: M_El, M_PIl, and so forth. These are only available if _GNU_SOURCE is defined.

Note: Some programs use a constant named PI which has the same value as M_PI. This constant is not standard; it may have appeared in some old AT&T headers, and is mentioned in Stroustrup's book on C++. It infringes on the user's name space, so the GNU C library does not define it. Fixing programs written to expect it is simple: replace PI with M_PI throughout, or put ‘-DPI=M_PI’ on the compiler command line.

While these constants are common, they are not part of the C standard, so most modern compilers require an explicit definition (such as _USE_MATH_DEFINES in Microsoft Visual C++ [1]) for them to be defined when including math.h.



  1. Math Constants, MSDN.