sig
  type 'a tt
  and round = Near | Zero | Up | Down | Away | Faith | NearAway
  type m
  type f
  type t = Mpfr.m Mpfr.tt
  val print : Format.formatter -> 'Mpfr.tt -> unit
  val print_round : Format.formatter -> Mpfr.round -> unit
  val string_of_round : Mpfr.round -> string
  external set_default_rounding_mode : Mpfr.round -> unit
    = "camlidl_mpfr_mpfr_set_default_rounding_mode"
  external get_default_rounding_mode : unit -> Mpfr.round
    = "camlidl_mpfr_mpfr_get_default_rounding_mode"
  external round_prec : Mpfr.t -> Mpfr.round -> int -> int
    = "camlidl_mpfr_mpfr_round_prec"
  external get_emin : unit -> int = "camlidl_mpfr_mpfr_get_emin"
  external get_emax : unit -> int = "camlidl_mpfr_mpfr_get_emax"
  external set_emin : int -> unit = "camlidl_mpfr_mpfr_set_emin"
  external set_emax : int -> unit = "camlidl_mpfr_mpfr_set_emax"
  external check_range : Mpfr.t -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_check_range"
  external clear_underflow : unit -> unit
    = "camlidl_mpfr_mpfr_clear_underflow"
  external clear_overflow : unit -> unit = "camlidl_mpfr_mpfr_clear_overflow"
  external clear_nanflag : unit -> unit = "camlidl_mpfr_mpfr_clear_nanflag"
  external clear_inexflag : unit -> unit = "camlidl_mpfr_mpfr_clear_inexflag"
  external clear_flags : unit -> unit = "camlidl_mpfr_mpfr_clear_flags"
  external underflow_p : unit -> bool = "camlidl_mpfr_mpfr_underflow_p"
  external overflow_p : unit -> bool = "camlidl_mpfr_mpfr_overflow_p"
  external nanflag_p : unit -> bool = "camlidl_mpfr_mpfr_nanflag_p"
  external inexflag_p : unit -> bool = "camlidl_mpfr_mpfr_inexflag_p"
  external set_default_prec : int -> unit
    = "camlidl_mpfr_mpfr_set_default_prec"
  external get_default_prec : unit -> int
    = "camlidl_mpfr_mpfr_get_default_prec"
  external init : unit -> 'Mpfr.tt = "camlidl_mpfr_mpfr_init"
  external init2 : int -> 'Mpfr.tt = "camlidl_mpfr_mpfr_init2"
  external get_prec : 'Mpfr.tt -> int = "camlidl_mpfr_mpfr_get_prec"
  external set_prec : Mpfr.t -> int -> unit = "camlidl_mpfr_mpfr_set_prec"
  external set_prec_raw : Mpfr.t -> int -> unit
    = "camlidl_mpfr_mpfr_set_prec_raw"
  external set : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_set"
  external set_si : Mpfr.t -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_set_si"
  external set_d : Mpfr.t -> float -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_set_d"
  external set_z : Mpfr.t -> 'Mpz.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_set_z"
  external set_q : Mpfr.t -> 'Mpq.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_set_q"
  external _set_str : Mpfr.t -> string -> int -> Mpfr.round -> unit
    = "camlidl_mpfr_mpfr__set_str"
  val set_str : Mpfr.t -> string -> base:int -> Mpfr.round -> unit
  external _strtofr : Mpfr.t -> string -> int -> Mpfr.round -> int * int
    = "camlidl_mpfr_mpfr__strtofr"
  val strtofr : Mpfr.t -> string -> base:int -> Mpfr.round -> int * int
  external set_f : Mpfr.t -> 'Mpf.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_set_f"
  external set_si_2exp : Mpfr.t -> int -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_set_si_2exp"
  external set_inf : Mpfr.t -> int -> unit = "camlidl_mpfr_mpfr_set_inf"
  external set_nan : Mpfr.t -> unit = "camlidl_mpfr_mpfr_set_nan"
  external swap : Mpfr.t -> Mpfr.t -> unit = "camlidl_mpfr_mpfr_swap"
  external init_set : 'Mpfr.tt -> Mpfr.round -> int * 'Mpfr.tt
    = "camlidl_mpfr_mpfr_init_set"
  external init_set_si : int -> Mpfr.round -> int * 'Mpfr.tt
    = "camlidl_mpfr_mpfr_init_set_si"
  external init_set_d : float -> Mpfr.round -> int * 'Mpfr.tt
    = "camlidl_mpfr_mpfr_init_set_d"
  external init_set_f : 'Mpf.tt -> Mpfr.round -> int * 'Mpfr.tt
    = "camlidl_mpfr_mpfr_init_set_f"
  external init_set_z : 'Mpz.tt -> Mpfr.round -> int * 'Mpfr.tt
    = "camlidl_mpfr_mpfr_init_set_z"
  external init_set_q : 'Mpq.tt -> Mpfr.round -> int * 'Mpfr.tt
    = "camlidl_mpfr_mpfr_init_set_q"
  external _init_set_str : string -> int -> Mpfr.round -> 'Mpfr.tt
    = "camlidl_mpfr_mpfr__init_set_str"
  val init_set_str : string -> base:int -> Mpfr.round -> 'Mpfr.tt
  external get_d : 'Mpfr.tt -> Mpfr.round -> float
    = "camlidl_mpfr_mpfr_get_d"
  external get_d1 : 'Mpfr.tt -> float = "camlidl_mpfr_mpfr_get_d1"
  external get_z_exp : Mpz.t -> 'Mpfr.tt -> int
    = "camlidl_mpfr_mpfr_get_z_exp"
  external get_z : Mpz.t -> 'Mpfr.tt -> Mpfr.round -> unit
    = "camlidl_mpfr_mpfr_get_z"
  external _get_str : int -> int -> 'Mpfr.tt -> Mpfr.round -> string * int
    = "camlidl_mpfr_mpfr__get_str"
  val get_str :
    base:int -> digits:int -> Mpfr.t -> Mpfr.round -> string * int
  val to_string : 'Mpfr.tt -> string
  val to_float : ?round:Mpfr.round -> 'Mpfr.tt -> float
  val to_mpq : 'Mpfr.tt -> 'Mpq.tt
  val of_string : string -> Mpfr.round -> 'Mpfr.tt
  val of_float : float -> Mpfr.round -> 'Mpfr.tt
  val of_int : int -> Mpfr.round -> 'Mpfr.tt
  val of_frac : int -> int -> Mpfr.round -> 'Mpfr.tt
  val of_mpz : 'Mpz.tt -> Mpfr.round -> 'Mpfr.tt
  val of_mpz2 : 'Mpz.tt -> 'Mpz.tt -> Mpfr.round -> 'Mpfr.tt
  val of_mpq : 'Mpq.tt -> Mpfr.round -> 'Mpfr.tt
  external add : Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_add"
  external add_ui : Mpfr.t -> 'Mpfr.tt -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_add_ui"
  external add_z : Mpfr.t -> 'Mpfr.tt -> 'Mpz.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_add_z"
  external add_q : Mpfr.t -> 'Mpfr.tt -> 'Mpq.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_add_q"
  external sub : Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_sub"
  external ui_sub : Mpfr.t -> int -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_ui_sub"
  external sub_ui : Mpfr.t -> 'Mpfr.tt -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_sub_ui"
  external sub_z : Mpfr.t -> 'Mpfr.tt -> 'Mpz.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_sub_z"
  external sub_q : Mpfr.t -> 'Mpfr.tt -> 'Mpq.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_sub_q"
  external mul : Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_mul"
  external mul_ui : Mpfr.t -> 'Mpfr.tt -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_mul_ui"
  external mul_z : Mpfr.t -> 'Mpfr.tt -> 'Mpz.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_mul_z"
  external mul_q : Mpfr.t -> 'Mpfr.tt -> 'Mpq.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_mul_q"
  external mul_2ui : Mpfr.t -> 'Mpfr.tt -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_mul_2ui"
  external mul_2si : Mpfr.t -> 'Mpfr.tt -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_mul_2si"
  external mul_2exp : Mpfr.t -> 'Mpfr.tt -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_mul_2exp"
  external div : Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_div"
  external ui_div : Mpfr.t -> int -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_ui_div"
  external div_ui : Mpfr.t -> 'Mpfr.tt -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_div_ui"
  external div_z : Mpfr.t -> 'Mpfr.tt -> 'Mpz.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_div_z"
  external div_q : Mpfr.t -> 'Mpfr.tt -> 'Mpq.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_div_q"
  external div_2ui : Mpfr.t -> 'Mpfr.tt -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_div_2ui"
  external div_2si : Mpfr.t -> 'Mpfr.tt -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_div_2si"
  val div_2exp : Mpfr.t -> Mpfr.t -> int -> Mpfr.round -> int
  external sqrt : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> bool
    = "camlidl_mpfr_mpfr_sqrt"
  external sqrt_ui : Mpfr.t -> int -> Mpfr.round -> bool
    = "camlidl_mpfr_mpfr_sqrt_ui"
  external pow_ui : Mpfr.t -> 'Mpfr.tt -> int -> Mpfr.round -> bool
    = "camlidl_mpfr_mpfr_pow_ui"
  external pow_si : Mpfr.t -> 'Mpfr.tt -> int -> Mpfr.round -> bool
    = "camlidl_mpfr_mpfr_pow_si"
  external ui_pow_ui : Mpfr.t -> int -> int -> Mpfr.round -> bool
    = "camlidl_mpfr_mpfr_ui_pow_ui"
  external ui_pow : Mpfr.t -> int -> 'Mpfr.tt -> Mpfr.round -> bool
    = "camlidl_mpfr_mpfr_ui_pow"
  external pow : Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> bool
    = "camlidl_mpfr_mpfr_pow"
  external neg : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_neg"
  external abs : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_abs"
  external cmp : 'Mpfr.tt -> 'Mpfr.tt -> int = "camlidl_mpfr_mpfr_cmp"
  external cmp_si : 'Mpfr.tt -> int -> int = "camlidl_mpfr_mpfr_cmp_si"
  external cmp_si_2exp : 'Mpfr.tt -> int -> int -> int
    = "camlidl_mpfr_mpfr_cmp_si_2exp"
  external sgn : 'Mpfr.tt -> int = "camlidl_mpfr_mpfr_sgn"
  external _equal : 'Mpfr.tt -> 'Mpfr.tt -> int -> bool
    = "camlidl_mpfr_mpfr__equal"
  val equal : 'Mpfr.tt -> 'Mpfr.tt -> bits:int -> bool
  external nan_p : 'Mpfr.tt -> bool = "camlidl_mpfr_mpfr_nan_p"
  external inf_p : 'Mpfr.tt -> bool = "camlidl_mpfr_mpfr_inf_p"
  external number_p : 'Mpfr.tt -> bool = "camlidl_mpfr_mpfr_number_p"
  external reldiff : Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> unit
    = "camlidl_mpfr_mpfr_reldiff"
  external log : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_log"
  external log2 : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_log2"
  external log10 : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_log10"
  external exp : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_exp"
  external exp2 : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_exp2"
  external exp10 : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_exp10"
  external cos : 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_cos"
  external sin : 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_sin"
  external tan : 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_tan"
  external sec : 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_sec"
  external csc : 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_csc"
  external cot : 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_cot"
  external sin_cos :
    'Mpfr.tt -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> bool
    = "camlidl_mpfr_mpfr_sin_cos"
  external acos : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_acos"
  external asin : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_asin"
  external atan : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_atan"
  external atan2 : Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_atan2"
  external cosh : 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_cosh"
  external sinh : 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_sinh"
  external tanh : 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_tanh"
  external sech : 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_sech"
  external csch : 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_csch"
  external coth : 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_coth"
  external acosh : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_acosh"
  external asinh : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_asinh"
  external atanh : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_atanh"
  external fac_ui : Mpfr.t -> int -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_fac_ui"
  external log1p : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_log1p"
  external expm1 : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_expm1"
  external eint : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_eint"
  external gamma : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_gamma"
  external lngamma : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_lngamma"
  external zeta : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_zeta"
  external erf : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_erf"
  external erfc : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_erfc"
  external j0 : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_j0"
  external j1 : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_j1"
  external jn : Mpfr.t -> int -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_jn"
  external y0 : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_y0"
  external y1 : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_y1"
  external yn : Mpfr.t -> int -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_yn"
  external fma :
    Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_fma"
  external fms :
    Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_fms"
  external agm : Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_agm"
  external hypot : Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_hypot"
  external const_log2 : Mpfr.t -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_const_log2"
  external const_pi : Mpfr.t -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_const_pi"
  external const_euler : Mpfr.t -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_const_euler"
  external const_catalan : Mpfr.t -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_const_catalan"
  external rint : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_rint"
  external ceil : Mpfr.t -> 'Mpfr.tt -> int = "camlidl_mpfr_mpfr_ceil"
  external floor : Mpfr.t -> 'Mpfr.tt -> int = "camlidl_mpfr_mpfr_floor"
  external round : Mpfr.t -> 'Mpfr.tt -> int = "camlidl_mpfr_mpfr_round"
  external trunc : Mpfr.t -> 'Mpfr.tt -> int = "camlidl_mpfr_mpfr_trunc"
  external frac : Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_frac"
  external modf : Mpfr.t -> Mpfr.t -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_modf"
  external fmod : Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_fmod"
  external remainder :
    Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_remainder"
  external integer_p : 'Mpfr.tt -> bool = "camlidl_mpfr_mpfr_integer_p"
  external nexttoward : Mpfr.t -> 'Mpfr.tt -> unit
    = "camlidl_mpfr_mpfr_nexttoward"
  external nextabove : Mpfr.t -> unit = "camlidl_mpfr_mpfr_nextabove"
  external nextbelow : Mpfr.t -> unit = "camlidl_mpfr_mpfr_nextbelow"
  external min : Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_min"
  external max : Mpfr.t -> 'Mpfr.tt -> 'Mpfr.tt -> Mpfr.round -> int
    = "camlidl_mpfr_mpfr_max"
  external get_exp : 'Mpfr.tt -> int = "camlidl_mpfr_mpfr_get_exp"
  external set_exp : Mpfr.t -> int -> int = "camlidl_mpfr_mpfr_set_exp"
end