|
|
#include <complex.h>initializes yy as a complex number of the form (real+imag*i), evaluates the expressions and prints the result: (0.96476,1.21825).main(){ complex xx; complex yy = complex(1,2.718); xx = log(yy/3); cout << 1+xx; }
The C++ language does not have a built-in data type for complex numbers, but it does provide language facilities for defining new data types. The type complex is an example of how such a type is as easy to use, and almost as efficient, as a built-in type.
This facility for complex arithmetic provides the arithmetic operators
+,
/,
,
and
,
the assignment operators
=,
+=,
=,
=,
and
/=,
and the comparison operators
==
and
!=
for complex numbers.
Expressions such as
(xx+1)
log(yy
log(3.2))
that involve a mixture of real and complex numbers are handled
correctly.
The simplest complex operations, for example
+
and
+=,
are implemented without function call overhead.
Input and output can be done using the operators
>>
(get from)
and
<<
(put to).
The initialization functions and
>>
accept a Cartesian representation of a
complex.
The functions
real()
and
imag()
return the real and imaginary part of a
complex,
respectively, and
<<
prints a
complex
as
(real,imaginary).
The internal representation of a
complex,
is, however, inaccessible and in principle unknown to a user.
Polar coordinates can also be used. The function polar() creates a complex given its polar representation, and abs() and arg() return the polar magnitude and angle, respectively, of a complex. The function norm() returns the square of the magnitude of a complex. The following complex functions are also provided: sqrt(), exp(), log(), sin(), cos(), sinh(), cosh(), pow(), and conj().
A complete program using complex numbers can be found under ``An FFT function''
The complex type described in this topic is similar, but not identical, to the double_complex type being specified in the upcoming ANSI/ISO C++ language standard. In particular, unlike the upcoming standard, no complex type is defined for float or long double types.