# Numerics library

The C++ numerics library includes common mathematical functions and types, as well as optimized numeric arrays and support for random number generation.

## Mathematical functions and types

### Common mathematical functions

The header `<cmath>` provides standard C library mathematical functions such as std::fabs, std::sqrt, and std::sin.

### Mathematical special functions (since C++17)

The header `<cmath>` also provides several mathematical special functions such as std::beta, std::hermite, and std::cyl_bessel_i.

### Complex number arithmetic

Defined in header
`<complex>` | |

a complex number type (class template) |

### Numeric arrays

Defined in header
`<valarray>` | |

numeric arrays, array masks and array slices (class template) |

## Numeric algorithms

The header `<numeric>` provides numeric algorithms below:

### Factor operations

Defined in header
`<numeric>` | |

(C++17) |
`constexpr` function template returning the greatest common divisor of two integers (function template) |

(C++17) |
`constexpr` function template returning the least common multiple of two integers (function template) |

### Interpolation operations

Defined in header
`<numeric>` | |

(C++20) |
midpoint between two numbers or pointers (function template) |

Defined in header
`<cmath>` | |

(C++20) |
linear interpolation function (function) |

### Numeric operations

Defined in header
`<numeric>` | |

(C++11) |
fills a range with successive increments of the starting value (function template) |

sums up a range of elements (function template) | |

(C++17) |
similar to std::accumulate, except out of order (function template) |

(C++17) |
applies a functor, then reduces out of order (function template) |

computes the inner product of two ranges of elements (function template) | |

computes the differences between adjacent elements in a range (function template) | |

computes the partial sum of a range of elements (function template) | |

(C++17) |
similar to std::partial_sum, includes the ith input element in the ith sum (function template) |

(C++17) |
similar to std::partial_sum, excludes the ith input element from the ith sum (function template) |

(C++17) |
applies a functor, then calculates inclusive scan (function template) |

(C++17) |
applies a functor, then calculates exclusive scan (function template) |

## Miscellanous

### Pseudo-random number generation

The header `<random>` defines pseudo-random number generators and numerical distributions. The header `<cstdlib>` also includes C-style random number generation via std::srand and std::rand.

### Compile time rational arithmetic (since C++11)

The header `<ratio>` provides types and functions for manipulating and storing compile-time ratios.

### Floating-point environment (since C++11)

The header `<cfenv>` defines flags and functions related to exceptional floating-point state, such as overflow and division by zero.

### Bit manipulation (since C++20)

The header `<bit>` provides several function templates to access, manipulate, and process individual bits and bit sequences.

Defined in header
`<bit>` | |

Defined in namespace
`std` | |

reinterpret the object representation of one type as that of another (function template) | |

checks if a number is an integral power of two (function template) | |

finds the smallest integral power of two not less than the given value (function template) | |

finds the largest integral power of two not greater than the given value (function template) | |

finds the smallest number of bits needed to represent the given value (function template) |