# 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;

### 3.1.1.1 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);

### 3.1.1.2 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`

.