sig
  type t
  exception PrecisionOverflow
  val approx : Cr.t -> int -> Gmp.Z.t
  val msd : Cr.t -> int
  val add : Cr.t -> Cr.t -> Cr.t
  val neg : Cr.t -> Cr.t
  val sub : Cr.t -> Cr.t -> Cr.t
  val abs : Cr.t -> Cr.t
  val mul : Cr.t -> Cr.t -> Cr.t
  val inv : Cr.t -> Cr.t
  val div : Cr.t -> Cr.t -> Cr.t
  val pow_int : Cr.t -> int -> Cr.t
  val root : int -> Cr.t -> Cr.t
  val sqrt : Cr.t -> Cr.t
  val ln : Cr.t -> Cr.t
  val log : base:Cr.t -> Cr.t -> Cr.t
  val exp : Cr.t -> Cr.t
  val pow : Cr.t -> Cr.t -> Cr.t
  val sin : Cr.t -> Cr.t
  val cos : Cr.t -> Cr.t
  val tan : Cr.t -> Cr.t
  val arcsin : Cr.t -> Cr.t
  val arccos : Cr.t -> Cr.t
  val arctan : Cr.t -> Cr.t
  val arctan_reciproqual : int -> Cr.t
  val sinh : Cr.t -> Cr.t
  val cosh : Cr.t -> Cr.t
  val tanh : Cr.t -> Cr.t
  val arcsinh : Cr.t -> Cr.t
  val arccosh : Cr.t -> Cr.t
  val arctanh : Cr.t -> Cr.t
  val select : Cr.t -> Cr.t -> Cr.t -> Cr.t
  val compare : Cr.t -> Cr.t -> int
  val min : Cr.t -> Cr.t -> Cr.t
  val max : Cr.t -> Cr.t -> Cr.t
  val of_int : int -> Cr.t
  val of_z : Gmp.Z.t -> Cr.t
  val of_int64 : Int64.t -> Cr.t
  val of_float : float -> Cr.t
  val to_q : Cr.t -> int -> Gmp.Q.t
  val to_float : Cr.t -> int -> float
  val to_string : ?radix:int -> Cr.t -> int -> string
  val of_string : ?radix:int -> string -> Cr.t
  val zero : Cr.t
  val one : Cr.t
  val two : Cr.t
  val e : Cr.t
  val ln2 : Cr.t
  val pi : Cr.t
  val half_pi : Cr.t
  val inverse_monotone :
    (Cr.t -> Cr.t) -> low:Cr.t -> high:Cr.t -> Cr.t -> Cr.t
  val print : Format.formatter -> Cr.t -> unit
  val set_print_precision : int -> unit
  module Infixes :
    sig
      val ( +! ) : Cr.t -> Cr.t -> Cr.t
      val ( -! ) : Cr.t -> Cr.t -> Cr.t
      val ( *! ) : Cr.t -> Cr.t -> Cr.t
      val ( /! ) : Cr.t -> Cr.t -> Cr.t
    end
end