sig
  type t = Gmp.f
  val zero : prec:int -> Gmp.F.t
  val one : prec:int -> Gmp.F.t
  val minus_one : prec:int -> Gmp.F.t
  external compare : Gmp.F.t -> Gmp.F.t -> int = "mlgmp_f_compare"
  external compare_int : Gmp.F.t -> int -> int = "mlgmp_f_compare_int"
  external neg : prec:int -> Gmp.F.t -> Gmp.F.t = "mlgmp_f_neg"
  external abs : prec:int -> Gmp.F.t -> Gmp.F.t = "mlgmp_f_abs"
  external add : prec:int -> Gmp.F.t -> Gmp.F.t -> Gmp.F.t = "mlgmp_f_add"
  external add_int : prec:int -> Gmp.F.t -> int -> Gmp.F.t
    = "mlgmp_f_add_int"
  external sub : prec:int -> Gmp.F.t -> Gmp.F.t -> Gmp.F.t = "mlgmp_f_sub"
  external sub_int : prec:int -> Gmp.F.t -> int -> Gmp.F.t
    = "mlgmp_f_sub_int"
  external mul : prec:int -> Gmp.F.t -> Gmp.F.t -> Gmp.F.t = "mlgmp_f_mul"
  external mul_int : prec:int -> Gmp.F.t -> int -> Gmp.F.t
    = "mlgmp_f_mul_int"
  external div : prec:int -> Gmp.F.t -> Gmp.F.t -> Gmp.F.t = "mlgmp_f_div"
  external fma : prec:int -> Gmp.F.t -> Gmp.F.t -> Gmp.F.t -> Gmp.F.t
    = "mlgmp_f_fma"
  external pow_int : prec:int -> base:Gmp.F.t -> exponent:int -> Gmp.F.t
    = "mlgmp_f_pow_int"
  external int_pow_int : prec:int -> base:int -> exponent:int -> Gmp.F.t
    = "mlgmp_f_int_pow_int"
  external scale : prec:int -> Gmp.F.t -> base:int -> exponent:int -> Gmp.F.t
    = "mlgmp_f_scale"
  external root : prec:int -> nth:int -> Gmp.F.t -> Gmp.F.t = "mlgmp_f_root"
  external sqrt : prec:int -> Gmp.F.t -> Gmp.F.t = "mlgmp_f_sqrt"
  external nearly_equal : int -> Gmp.F.t -> Gmp.F.t -> bool
    = "mlgmp_f_nearly_equal"
  external frexp : prec:int -> Gmp.F.t -> Gmp.F.t * int = "mlgmp_f_frexp"
  external ldexp : prec:int -> Gmp.F.t -> int -> Gmp.F.t = "mlgmp_f_ldexp"
  external trunc : prec:int -> Gmp.F.t -> Gmp.F.t = "mlgmp_f_trunc"
  external ceil : prec:int -> Gmp.F.t -> Gmp.F.t = "mlgmp_f_ceil"
  external floor : prec:int -> Gmp.F.t -> Gmp.F.t = "mlgmp_f_floor"
  external log : prec:int -> Gmp.F.t -> Gmp.F.t = "mlgmp_f_log"
  external based_log : prec:int -> base:int -> Gmp.F.t -> Gmp.F.t
    = "mlgmp_f_based_log"
  external of_based_string : prec:int -> base:int -> string -> Gmp.F.t
    = "mlgmp_f_of_based_string"
  val of_string : prec:int -> string -> Gmp.F.t
  external to_based_string : base:int -> Gmp.F.t -> string
    = "mlgmp_based_string_of_f"
  val to_string : Gmp.F.t -> string
  external of_int : prec:int -> int -> Gmp.F.t = "mlgmp_f_of_int"
  external of_float : prec:int -> float -> Gmp.F.t = "mlgmp_f_of_float"
  external to_float : Gmp.F.t -> float = "mlgmp_float_of_f"
  external of_z : prec:int -> Gmp.z -> Gmp.F.t = "mlgmp_f_of_z"
  module type Param = sig val prec : int end
  module Make :
    Param ->
      sig
        type t = Gmp.f
        val zero : Gmp.F.Make.t
        val one : Gmp.F.Make.t
        val minus_one : Gmp.F.Make.t
        external compare : Gmp.F.Make.t -> Gmp.F.Make.t -> int
          = "mlgmp_f_compare"
        external compare_int : Gmp.F.Make.t -> int -> int
          = "mlgmp_f_compare_int"
        val neg : Gmp.F.Make.t -> Gmp.F.Make.t
        val abs : Gmp.F.Make.t -> Gmp.F.Make.t
        val add : Gmp.F.Make.t -> Gmp.F.Make.t -> Gmp.F.Make.t
        val add_int : Gmp.F.Make.t -> int -> Gmp.F.Make.t
        val sub : Gmp.F.Make.t -> Gmp.F.Make.t -> Gmp.F.Make.t
        val sub_int : Gmp.F.Make.t -> int -> Gmp.F.Make.t
        val mul : Gmp.F.Make.t -> Gmp.F.Make.t -> Gmp.F.Make.t
        val mul_int : Gmp.F.Make.t -> int -> Gmp.F.Make.t
        val div : Gmp.F.Make.t -> Gmp.F.Make.t -> Gmp.F.Make.t
        val fma :
          Gmp.F.Make.t -> Gmp.F.Make.t -> Gmp.F.Make.t -> Gmp.F.Make.t
        val pow_int : base:Gmp.F.Make.t -> exponent:int -> Gmp.F.Make.t
        val int_pow_int : base:int -> exponent:int -> Gmp.F.Make.t
        val scale : Gmp.F.Make.t -> base:int -> exponent:int -> Gmp.F.Make.t
        val root : nth:int -> Gmp.F.Make.t -> Gmp.F.Make.t
        val sqrt : Gmp.F.Make.t -> Gmp.F.Make.t
        external nearly_equal : int -> Gmp.F.Make.t -> Gmp.F.Make.t -> bool
          = "mlgmp_f_nearly_equal"
        val frexp : Gmp.F.Make.t -> Gmp.F.Make.t * int
        val ldexp : Gmp.F.Make.t -> int -> Gmp.F.Make.t
        val trunc : Gmp.F.Make.t -> Gmp.F.Make.t
        val ceil : Gmp.F.Make.t -> Gmp.F.Make.t
        val floor : Gmp.F.Make.t -> Gmp.F.Make.t
        val log : Gmp.F.Make.t -> Gmp.F.Make.t
        val based_log : base:int -> Gmp.F.Make.t -> Gmp.F.Make.t
        val of_based_string : base:int -> string -> Gmp.F.Make.t
        val of_string : string -> Gmp.F.Make.t
        external to_based_string : base:int -> Gmp.F.Make.t -> string
          = "mlgmp_based_string_of_f"
        val to_string : Gmp.F.Make.t -> string
        val of_int : int -> Gmp.F.Make.t
        val of_float : float -> Gmp.F.Make.t
        external to_float : Gmp.F.Make.t -> float = "mlgmp_float_of_f"
        val of_z : Gmp.z -> Gmp.F.Make.t
      end
  external default_prec : unit -> int = "mlgmp_f_default_prec"
  val default : unit -> (module Gmp.F.Param)
end