ExpandCollapsePrev Next Index

+ 3.1 Floating Point Complex

There are 3 floating point complex types: fcomplex, dcomplex and lcomplex corresponding to float, double, and {long double} real numbers. The mapping is to these C++ types:

  Felix name    Alias              C name
  fcomplex      complex[float]    ::std::complex<float>
  dcomplex      complex[double]   ::std::complex<double>
  lcomplex      complex[ldouble]  ::std::complex<long double>

+ 3.1.1 Functions

Complex floats can be compared for equality, however there are no other comparisons because there is no canonical way to order them.

Complex floats support these base functions:

  neg: t -> t;
  add: t * t -> t;
  sub: t * t -> t;
  mul: t * t -> t;
  div: t * t -> t;

and these trigonometric functions:

  sin: t -> t;
  cos: t -> t;
  tan: t -> t;
  asin: t -> t;
  acos: t -> t;
  atan: t -> t;
  sinh: t -> t;
  cosh: t -> t;
  tanh: t -> t;
  asinh: t -> t;
  acosh: t -> t;
  atanh: t -> t;
  exp: t -> t;
  log: t -> t;
  pow: t * t -> t;

+ Complex constructors

Complex numbers do not have literals, instead they have constructors. A complex number of any type can be constructed from one real of any type, or two reals of the same type, this being the Cartesian form.

  val z = dcomplex (1.0,2.0);

+ Complex functions

In addition to the base and trigonometric functions, complex numbers support these functions:

  // destructors
  real: t -> r;
  imag: t -> r;
  abs: t -> r;
  arg: t -> r;

  // mixed complex and real operations
  add: r * t -> t;
  add: t * r -> t;
  sub: r * t -> t;
  sub: t * r -> t;
  mul : t * r -> t;
  mul : r * t -> t;
  div : t * r -> t;
  div : r * t -> t;

where r is the real type corresponding to the complex type t.