In C++11 and C++14, we were able to use this math.h
library in C++ applications. After the C++17 standard, this library is modernized in the cmath
library, and functions are declared in <cmath>
header for compatibility reasons in modern C++, and the <math.h>
is an optional header to support legacy code. In this post, we list most of these mathematical functions declared in the <cmath>
header of modern C++.
Table of Contents
What is the cmath mathematical functions library in C++?
The CMath Mathematical Special Functions Header <cmath>
defines mathematical functions and symbols in the std namespace, and previous math functions are also included. It may also define them in the global namespace. You have to add a std namespace using namespace std;
or you should use the std::
prefix for each math function.
Some of the mathematical special functions are added to the C++17 cmath library header by the contents of the former international standard ISO/IEC 29124:2010 Math.h functions added too. These are only available in namespace std. If you do not use namespace you should add std::
prefix to use these modern math functions.
In general, they are mostly double functions and can be slower but they have more accurate results. In the example sin()
is used with double
variables, sinf()
used with float
variables (same as C++11, faster, less accurate), and sinl()
used with long double
variables (same as C++11, slower, more accurate).
Here is a simple C++ example using the sin
function.
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> #include <cmath> int main() { double d = std::sin(1.0); // double float f = std::sinf(1.0); // float (C++11) long double l = std::sinl(1.0); // long double (C++11) } |
What Are The CMath Mathematical Functions in Modern C++?
Here are some of most used mathematical functions defined in cmath
header.
Basic Math Functions
Here are basic functions,
Description | double | float | long double |
absolute value | fabs | fabsf / abs | fabsl |
remainder | fmod | fmodf | fmodl |
signed remainder | reminder | reminderf | reminderl |
signed remainder as well as the three last bits of the division operation | remquo | remquof | remquol |
fused multiply-add | fma | fmaf | fmal |
maximum value of two parameters | fmax | fmaxf | fmaxl |
minimum value of two parameters | fmin | fminf | fminl |
positive difference of two parameters | fdim | fdimf | fdiml |
NaN (not-a-number) | nan | nanf | nanl |
Exponential Functions
Here are exponential functions,
Description | double | float | long double |
power of e | exp | expf | expl |
power of 2 | exp2 | exp2f | exp2l |
power of e minus one | expm1 | expm1f | expm1l |
ln x, logarithm (base e) | log | logf | logl |
logarithm (base 10) | log10 | log10f | log10l |
logarithm (base 2) | log2 | log2f | log2l |
ln( 1 + x ) , natural logarithm (base e) | log1p | log1pf | log1pl |
Power Functions
Here are power functions.
Description | double | float | long double |
x power y | pow | powf | powl |
square root x | sqrt | sqrtf | sqrtl |
cubic root x | cbrt | cbrtf | cbrtl |
hypotenuse of x, y or x, y, z | hypot | hypotf | hypotl |
Trigonometric Functions
Here are trigonometric functions.
Description | double | float | long double |
sine x | sin | sinf | sinl |
cosine x | cos | cosf | cosl |
tangent x | tan | tanf | tanl |
arcs sine x | asin | asinf | asinl |
arc cosine x | acos | acosf | acosl |
arc tangent x | atan | atanf | atanl |
arc tangent of x and y | atan2 | atan2f | atan2l |
Hyperbolic Trigonometric Functions
Here are hyperbolic trigonometric functions,\.
Description | double | float | long double |
hyperbolic sine x | sinh | sinhf | sinhl |
hyperbolic cosine x | cosh | coshf | coshl |
hyperbolic tangent x | tanh | tanhf | tanhl |
hyperbolic arcs sine x | asinh | asinhf | asinhl |
hyperbolic arc cosine x | acosh | acoshf | acoshl |
hyperbolic arc tangent x | atanh | atanhf | atanhl |
Nearest Functions
Here are nearest functions.
Description | double | float | long double |
nearest integer not less than x | ceil | sinf | sinl |
nearest integer not greater than x | floor | cosf | cosl |
nearest integer not greater in magnitude than x | trunc | tanf | tanl |
nearest integer, rounding away from zero in halfway cases | round lround llround | roundf lroundf llroundf | roundl lroundl llroundl |
nearest integer using current rounding mode | nearbyint | nearbyintf | nearbyintl |
nearest integer using current rounding mode with exception if the result differs | rint lrint llrint | rintf lrintf llrintf | rintl lrintl llrintl |
Note that, by the C++20 standard, only default names of math functions are used. For example, sin()
is used for the float
, double
and long double
versions.
Other Modern Functions in C++
There are many other functions and new modern mathematical functions in the C++17 cmath
header. Such as, functions for associated Laguerre polynomials, The elliptic integral of the first kind functions, Cylindrical Bessel functions (of the first kind), Cylindrical Neumann functions, Exponential integral functions, Hermite polynomials functions, Legendre polynomials functions, Laguerre polynomials, Riemann zeta function, and some spherical functions of them.
For more details about changes in C++17 standard, please see this https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0226r1.pdf
C++ Builder is the easiest and fastest C and C++ compiler and IDE for building simple or professional applications on the Windows operating system. It is also easy for beginners to learn with its wide range of samples, tutorials, help files, and LSP support for code. RAD Studio’s C++ Builder version comes with the award-winning VCL framework for high-performance native Windows apps and the powerful FireMonkey (FMX) framework for UIs.
There is a free C++ Builder Community Edition for students, beginners, and startups; it can be downloaded from here. For professional developers, there are Professional, Architect, or Enterprise versions of C++ Builder and there is a trial version you can download from here.