Math.h in POSIX, ISO, and Visual Studio

This page compares the list of functions in the C math.h header across four versions: ISO (ANSI) pre-1999, ISO post-1999, POSIX, and Microsoft Visual Studio.

The smallest list is the ISO standard prior to 1999. All other lists completely contain the original ISO standard.

The latest POSIX and ISO standards are essentially identical. The only difference is that the POSIX standard requires Bessel functions of the first kind j0, j1, and jn and Bessel functions of the second kind y0, y1, and yn.

Microsoft supports the older ISO standard and supports the Bessel functions mentioned above. Microsoft supports some of the functions added to the ISO standard in 1999. The Microsoft names for these new functions are the ISO names with an underscore prefix. The only minor exception is that the Microsoft function corresponding to the ISO function fpclassify is _fpclass rather than _fpclassify.

Details are given in the table below.

Function POSIX old ISO ISO C99 Microsoft Notes
acos Y Y Y Y
acosh Y N Y N 1
asin Y Y Y Y
asinh Y N Y N 1
atan Y Y Y Y
atan2 Y Y Y Y
atanh Y N Y N 1
cbrt Y N Y N
ceil Y Y Y Y
copysign Y N Y Y _copysign
cos Y Y Y Y
cosh Y Y Y Y
erf Y N Y N 2
erfc Y N Y N
exp Y Y Y Y
exp2 Y N Y N
expm1 Y N Y N 2
fabs Y Y Y Y
fdim Y N Y N
floor Y Y Y Y
fma Y N Y N
fmax Y N Y N
fmin Y N Y N
fmod Y Y Y Y
fpclassify Y N Y Y _fpclass
frexp Y Y Y Y
hypot Y N Y Y  _hypot
ilogb Y N Y N
isfinite Y N Y N 3
isgreater Y N Y N
isgreaterequal Y N Y N
isinf Y N Y N
isless Y N Y N
islessequal Y N Y N
islessgreater Y N Y N
isnan Y N Y Y _isnan
isnormal Y N Y N
isunordered Y N Y N
j0 Y N N Y _j0
j1 Y N N Y _j1
jn Y N N Y _jn
ldexp Y Y Y Y
lgamma Y N Y N 2
llrint Y N Y N
llround Y N Y N
log Y Y Y Y
log10 Y Y Y Y
log1p Y N Y N 2
log2 Y N Y N
logb Y N Y Y _logb
lrint Y N Y N
lround Y N Y N
modf Y Y Y Y
nan Y N Y N
nearbyint Y N Y N
nextafter Y N Y Y _nextafter
nexttoward N N Y N
pow Y Y Y Y
remainder Y N Y N
remquo Y N Y N
rint Y N Y N
round Y N Y N
scalbln Y N Y N
scalbn N N Y N
signbit Y N Y N
sin Y Y Y Y
sinh Y Y Y Y
sqrt Y Y Y Y
tan Y Y Y Y
tanh Y Y Y Y
tgamma Y N Y N 2
trunc Y N Y N
y0 Y N N Y  _y0
y1 Y N N Y  _y1
yn Y N N Y  _yn

[1] The inverse hyperbolic functions can be reduced to more familiar functions.

  • asinh(x) = log(x + sqrt(x2 + 1))
  • acosh(x) = log(x + sqrt(x2 – 1))
  • atanh(x) = (log(1+x) – log(1-x))/2

[2] Here is stand-alone code for these functions: erf, expm1, log1p, lgamma, tgamma.

[3] You can test whether a number is a NaN by testing whether it equals itself. The expression (x == x) returns true if and only if x is not a NaN. (See floating point exceptions.)

 

Other C++ resources