Numerics
The C++ library has several headers that support numerical
programming. The most basic header is <cmath>, which declares transcendental
and other mathematical functions. This C header is expanded in C++ to
declare overloaded versions of every function. For example, whereas C
declares only exp(double), C++ also
declares exp(float) and exp(long double).
The <complex> header declares a class template for complex numbers,
with the specializations you would probably expect for float, double, and long double. Transcendental and I/O functions are
also declared for complex numbers.
The <numeric> header
declares a few algorithms (that use standard iterators) for numerical
sequences.
The most interesting numerical functions are in <valarray> . A valarray is like an
ordinary numerical array, but the compiler is free to make some
simplifying assumptions to improve optimization. A valarray is not a container, so it cannot be
used with standard algorithms or the standard numeric algorithms.
You can use the complex
template as an example of how to define custom numeric types. For
example, suppose you want to define a type to represent rational numbers
(fractions). To use rational
objects in a valarray,
you must define the class so it behaves the same as ordinary values,
such as ints. In other words, a
custom numeric type should have the following:
A public default constructor (e.g.,
rational( ))A public copy constructor (e.g.,
rational(constrational&))A public destructor
A public assignment ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access