sig
  type ieee_type = NAN | INF | NORMAL | DENORMAL | ZERO
  type float_rep = {
    sign : int;
    mantissa : string;
    exponent : int;
    ieee_type : Gsl_ieee.ieee_type;
  }
  external rep_of_float : float -> Gsl_ieee.float_rep
    = "ml_gsl_ieee_double_to_rep"
  val print : float -> string
  type precision = SINGLE | DOUBLE | EXTENDED
  type rounding = TO_NEAREST | DOWN | UP | TO_ZERO
  type exceptions =
      MASK_INVALID
    | MASK_DENORMALIZED
    | MASK_DIVISION_BY_ZERO
    | MASK_OVERFLOW
    | MASK_UNDERFLOW
    | MASK_ALL
    | TRAP_INEXACT
  external set_mode :
    ?precision:Gsl_ieee.precision ->
    ?rounding:Gsl_ieee.rounding -> Gsl_ieee.exceptions list -> unit
    = "ml_gsl_ieee_set_mode"
  external env_setup : unit -> unit = "ml_gsl_ieee_env_setup"
  type excepts =
      FE_INEXACT
    | FE_DIVBYZERO
    | FE_UNDERFLOW
    | FE_OVERFLOW
    | FE_INVALID
    | FE_ALL_EXCEPT
  external clear_except : Gsl_ieee.excepts list -> unit = "ml_feclearexcept"
  external test_except : Gsl_ieee.excepts list -> Gsl_ieee.excepts list
    = "ml_fetestexcept"
end