sig
  type t = Gmp.q
  val zero : Gmp.Q.t
  val one : Gmp.Q.t
  val minus_one : Gmp.Q.t
  external compare : Gmp.Q.t -> Gmp.Q.t -> int = "mlgmp_q_compare"
  external compare_int : Gmp.Q.t -> int -> int = "mlgmp_q_compare_int"
  external neg : Gmp.Q.t -> Gmp.Q.t = "mlgmp_q_neg"
  external abs : Gmp.Q.t -> Gmp.Q.t = "mlgmp_q_abs"
  external add : Gmp.Q.t -> Gmp.Q.t -> Gmp.Q.t = "mlgmp_q_add"
  external add_int : Gmp.Q.t -> int -> Gmp.Q.t = "mlgmp_q_add_int"
  external sub : Gmp.Q.t -> Gmp.Q.t -> Gmp.Q.t = "mlgmp_q_sub"
  external sub_int : Gmp.Q.t -> int -> Gmp.Q.t = "mlgmp_q_sub_int"
  external mul : Gmp.Q.t -> Gmp.Q.t -> Gmp.Q.t = "mlgmp_q_mul"
  external mul_int : Gmp.Q.t -> int -> Gmp.Q.t = "mlgmp_q_mul_int"
  external div : Gmp.Q.t -> Gmp.Q.t -> Gmp.Q.t = "mlgmp_q_div"
  external fma : Gmp.Q.t -> Gmp.Q.t -> Gmp.Q.t -> Gmp.Q.t = "mlgmp_q_fma"
  external pow_int : base:Gmp.Q.t -> exponent:int -> Gmp.Q.t
    = "mlgmp_q_pow_int"
  external int_pow_int : base:int -> exponent:int -> Gmp.Q.t
    = "mlgmp_q_int_pow_int"
  external scale : Gmp.Q.t -> base:int -> exponent:int -> Gmp.Q.t
    = "mlgmp_q_scale"
  external root : nth:int -> Gmp.Q.t -> Gmp.Q.t = "mlgmp_q_root"
  external sqrt : Gmp.Q.t -> Gmp.Q.t = "mlgmp_q_sqrt"
  external num : Gmp.Q.t -> Gmp.z = "mlgmp_q_num"
  external den : Gmp.Q.t -> Gmp.z = "mlgmp_q_den"
  external of_based_string : base:int -> string -> Gmp.Q.t
    = "mlgmp_q_of_based_string"
  val of_string : string -> Gmp.Q.t
  external to_based_string : base:int -> Gmp.Q.t -> string
    = "mlgmp_based_string_of_q"
  val to_string : Gmp.Q.t -> string
  external of_int : int -> Gmp.Q.t = "mlgmp_q_of_int"
  external of_float : float -> Gmp.Q.t = "mlgmp_q_of_float"
  external to_float : Gmp.Q.t -> float = "mlgmp_float_of_q"
  external of_z : Gmp.z -> Gmp.Q.t = "mlgmp_q_of_z"
  external make_int : int -> int -> Gmp.Q.t = "mlgmp_q_make_int"
  external make_z : Gmp.z -> Gmp.z -> Gmp.Q.t = "mlgmp_q_make_z"
end