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 int
s. 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(const
rational&)
)A public destructor
A public assignment ...
Get C++ In a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.