Go to the first, previous, next, last section, table of contents.

Complex numbers

Complex numbers are represented using the type gsl_complex. The internal representation of this type may vary across platforms and should not be accessed directly. The functions and macros described below allow complex numbers to be manipulated in a portable way.

For reference, the default form of the gsl_complex type is given by the following struct,

typedef struct
{
  double dat[2];
} gsl_complex;

The real and imaginary part are stored in contiguous elements of a two element array. This eliminates any padding between the real and imaginary parts, dat[0] and dat[1], allowing the struct to be mapped correctly onto packed complex arrays.

Function: gsl_complex gsl_complex_rect (double x, double y)
This function uses the rectangular cartesian components (x,y) to return the complex number @math{z = x + i y}.

Function: gsl_complex gsl_complex_polar (double r, double theta)
This function returns the complex number @math{z = r \exp(i \theta) = r (\cos(\theta) + i \sin(\theta))} from the polar representation (r,theta).

Macro: GSL_REAL (z)
Macro: GSL_IMAG (z)
These macros return the real and imaginary parts of the complex number z.

Macro: GSL_SET_COMPLEX (zp, x, y)
This macro uses the cartesian components (x,y) to set the real and imaginary parts of the complex number pointed to by zp. For example,

GSL_SET_COMPLEX(&z, 3, 4)

sets z to be @math{3 + 4i}.

Macro: GSL_SET_REAL (zp,x)
Macro: GSL_SET_IMAG (zp,y)
These macros allow the real and imaginary parts of the complex number pointed to by zp to be set independently.


Go to the first, previous, next, last section, table of contents.