# Module Complex

`module Complex: `sig` .. `end``
Complex numbers.

This module provides arithmetic operations on complex numbers. Complex numbers are represented by their real and imaginary parts (cartesian representation). Each part is represented by a double-precision floating-point number (type `float`).

``type t = {``
 `  ` `re : float;` `  ` `im : float;`
}
The type of complex numbers. `re` is the real part and `im` the imaginary part.
`val zero : `t``
The complex number `0`.
`val one : `t``
The complex number `1`.
`val i : `t``
The complex number `i`.
`val neg : `t -> t``
Unary negation.
`val conj : `t -> t``
Conjugate: given the complex `x + i.y`, returns `x - i.y`.
`val add : `t -> t -> t``
`val sub : `t -> t -> t``
Subtraction
`val mul : `t -> t -> t``
Multiplication
`val inv : `t -> t``
Multiplicative inverse (`1/z`).
`val div : `t -> t -> t``
Division
`val sqrt : `t -> t``
Square root. The result `x + i.y` is such that `x > 0` or `x = 0` and `y >= 0`. This function has a discontinuity along the negative real axis.
`val norm2 : `t -> float``
Norm squared: given `x + i.y`, returns `x^2 + y^2`.
`val norm : `t -> float``
Norm: given `x + i.y`, returns `sqrt(x^2 + y^2)`.
`val arg : `t -> float``
Argument. The argument of a complex number is the angle in the complex plane between the positive real axis and a line passing through zero and the number. This angle ranges from `-pi` to `pi`. This function has a discontinuity along the negative real axis.
`val polar : `float -> float -> t``
`polar norm arg` returns the complex having norm `norm` and argument `arg`.
`val exp : `t -> t``
Exponentiation. `exp z` returns `e` to the `z` power.
`val log : `t -> t``
Natural logarithm (in base `e`).
`val pow : `t -> t -> t``
Power function. `pow z1 z2` returns `z1` to the `z2` power.