COMPLEX.H(3HEAD) Headers COMPLEX.H(3HEAD)
NAME
complex.h, complex - complex arithmetic
SYNOPSIS
#include <
complex.h>
DESCRIPTION
The <
complex.h> header defines the following macros:
complex Expands to
_Complex.
_Complex_I Expands to a constant expression of type const float
_Complex, with the value of the imaginary unit (that
is, a number i such that i^2=-1).
imaginary Expands to
_Imaginary.
_Imaginary_I Expands to a constant expression of type
const float _Imaginary with the value of the imaginary unit.
I Expands to either
_Imaginary_I or
_Complex_I. If
_Imaginary_I is not defined,
I expands to
_Complex_I.
An application can undefine and then, if appropriate, redefine the
complex,
imaginary, and
I macros.
USAGE
Values are interpreted as radians, not degrees.
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Standard |
+--------------------+-----------------+
SEE ALSO
cabs(3M),
cacos(3M),
cacosh(3M),
carg(3M),
casin(3M),
casinh(3M),
catan(3M),
catanh(3M),
ccos(3M),
ccosh(3M),
cexp(3M),
cimag(3M),
clog(3M),
conj(3M),
cpow(3M),
cproj(3M),
creal(3M),
csin(3M),
csinh(3M),
csqrt(3M),
ctan(3M),
ctanh(3M),
attributes(7),
standards(7)NOTES
The choice of
I instead of
i for the imaginary unit concedes to the
widespread use of the identifier
i for other purposes. The
application can use a different identifier, say
j, for the imaginary
unit by following the inclusion of the <
complex.h> header with:
#undef I
#define j _Imaginary_I
An
I suffix to designate imaginary constants is not required, as
multiplication by
I provides a sufficiently convenient and more
generally useful notation for imaginary terms. The corresponding real
type for the imaginary unit is
float, so that use of
I for
algorithmic or notational convenience does not result in widening
types.
On systems with imaginary types, the application has the ability to
control whether use of the macro
I introduces an imaginary type, by
explicitly defining
I to be
_Imaginary_I or
_Complex_I.
Disallowing imaginary types is useful for some applications intended
to run on implementations without support for such types.
The macro
_Imaginary_I provides a test for whether imaginary types
are supported. The
cis() function
(cos(x) + I*sin(x)) was considered
but rejected because its implementation is easy and straightforward,
even though some implementations could compute sine and cosine more
efficiently in tandem.
December 17, 2003 COMPLEX.H(3HEAD)