ISO C99 introduces support for complex numbers in C. This is done
with a new type qualifier,
complex. It is a keyword if and only
if complex.h has been included. There are three complex types,
corresponding to the three real types:
double complex, and
long double complex.
To construct complex numbers you need a way to indicate the imaginary part of a number. There is no standard notation for an imaginary floating point constant. Instead, complex.h defines two macros that can be used to create complex numbers.
This macro is a representation of the complex number “0+1i”. Multiplying a real floating-point value by
_Complex_Igives a complex number whose value is purely imaginary. You can use this to construct complex constants:3.0 + 4.0i =
3.0 + 4.0 * _Complex_I
_Complex_I * _Complex_Ihas the value
-1, but the type of that value is
_Complex_I is a bit of a mouthful. complex.h also defines
a shorter name for the same constant.
This macro has exactly the same value as
_Complex_I. Most of the time it is preferable. However, it causes problems if you want to use the identifier
Ifor something else. You can safely write#include <complex.h> #undef I
if you need
Ifor your own purposes. (In that case we recommend you also define some other short name for
_Complex_I, such as