Complex Numbers in C Programming

**COMPLEX_NUMBERS** is a C program which
demonstrates very briefly some of the features of using complex
numbers in a C program.

The first issue is how to declare a complex variable, including the choice of single precision or double precision, whether the variable is a scalar, vector, or array, and whether the variable is initialized with a value, or assigned one.

A second issue concerns the question of how a complex variable is to be printed out.

Another issue concerns how a complex variable is to operated on by the arithmetic operators of addition, subtraction, multiplication, division, and exponentiation.

The language also provides a number of intrinsic functions that can be applied to a complex variable. The names of these functions can sometimes be easy to forget. Moreover, it is occasionally true that there may be a selection of functions with similar names (say, "exp", "cexp" and "dcexp") which may or may not produce the desired results.

Another issue concerns the details of double precision calculation. Even a single accidental use of a single precision function name in a double precision computation can result in the loss of half the digits of accuracy. Thus, it sometimes really matters whether you use "cmplx" or "dcmplx" to assign values to a double precision complex variable.

An unusual feature of the implementation of complex numbers in C is that a complex number can be defined by a statement like

z = a + b * I;where

a = I;Instead, you would have to write

a = 1 * I;

Another issue concerns the mistakes that can be made, which will
evoke no warning from the compiler, but which will produce incorrect
results. Here I am thinking, in particular, of the fact that if
**z** is float complex or double complex, you should compute
its exponential with the expression **cexp(z)**; however, no
compiler warning will occur if you use the expression **exp(z)**;
however, these two expressions are not equivalent, and will
yield different results.

The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.

**COMPLEX_NUMBERS** is available in
a C version and
a C++ version and
a FORTRAN77 version and
a FORTRAN90 version and
a MATLAB version and
a Python version.

BLAS1_C, a C library which contains basic linear algebra routines for vector-vector operations, using single precision complex arithmetic;

BLAS1_Z, a C library which contains basic linear algebra routines for vector-vector operations, using double precision complex arithmetic.

C4_COMPLEX_LIB, a C library which defines a single precision complex variable or "C4" as a structure, and implements certain corresponding elementary functions.

C4LIB, a C library which implements certain elementary functions for "C4" or single precision complex variables;

C8_COMPLEX_LIB, a C library which defines a double precision complex variable or "C8" as a structure, and implements certain corresponding elementary functions.

C8LIB, a C library which implements certain elementary functions for "C8" or double precision complex variables;

- complex_numbers.c, the source code.

- complex_numbers_output.txt, the output file;

You can go up one level to the C source codes.