sig
  type t = { re : float; im : float; } 
  val zero : Complex.t
  val one : Complex.t
  val i : Complex.t
  val neg : Complex.t -> Complex.t
  val conj : Complex.t -> Complex.t
  val add : Complex.t -> Complex.t -> Complex.t
  val sub : Complex.t -> Complex.t -> Complex.t
  val mul : Complex.t -> Complex.t -> Complex.t
  val inv : Complex.t -> Complex.t
  val div : Complex.t -> Complex.t -> Complex.t
  val sqrt : Complex.t -> Complex.t
  val norm2 : Complex.t -> float
  val norm : Complex.t -> float
  val arg : Complex.t -> float
  val polar : float -> float -> Complex.t
  val exp : Complex.t -> Complex.t
  val log : Complex.t -> Complex.t
  val pow : Complex.t -> Complex.t -> Complex.t
end