sig
  module F :
    sig
      type t
      val packed_descr : Structural_descr.pack
      val of_float : float -> Fval.F.t
      val to_float : Fval.F.t -> float
      val compare : Fval.F.t -> Fval.F.t -> int
      val equal : Fval.F.t -> Fval.F.t -> bool
      val pretty : Format.formatter -> Fval.F.t -> unit
      val pretty_normal :
        use_hex:bool -> Format.formatter -> Fval.F.t -> unit
      val zero : Fval.F.t
      val next_float : float -> float
      val prev_float : float -> float
    end
  type t
  val packed_descr : Structural_descr.pack
  exception Non_finite
  type rounding_mode = Any | Nearest_Even
  val top_single_precision_float : Fval.t
  val round_to_single_precision_float :
    rounding_mode:Fval.rounding_mode -> Fval.t -> bool * Fval.t
  val bits_of_float64 :
    signed:bool -> Fval.t -> Abstract_interp.Int.t * Abstract_interp.Int.t
  val bits_of_float32 :
    signed:bool -> Fval.t -> Abstract_interp.Int.t * Abstract_interp.Int.t
  val has_finite : Fval.t -> bool
  type builtin_alarm = APosInf | ANegInf | ANaN of string | AAssume of string
  module Builtin_alarms :
    sig
      type elt = builtin_alarm
      type t
      val empty : t
      val is_empty : t -> bool
      val mem : elt -> t -> bool
      val add : elt -> t -> t
      val singleton : elt -> t
      val remove : elt -> t -> t
      val union : t -> t -> t
      val inter : t -> t -> t
      val diff : t -> t -> t
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val subset : t -> t -> bool
      val iter : (elt -> unit) -> t -> unit
      val map : (elt -> elt) -> t -> t
      val fold : (elt -> '-> 'a) -> t -> '-> 'a
      val for_all : (elt -> bool) -> t -> bool
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> t -> t
      val partition : (elt -> bool) -> t -> t * t
      val cardinal : t -> int
      val elements : t -> elt list
      val min_elt : t -> elt
      val max_elt : t -> elt
      val choose : t -> elt
      val split : elt -> t -> t * bool * t
      val find : elt -> t -> elt
      val of_list : elt list -> t
    end
  type builtin_res = Fval.Builtin_alarms.t * Fval.t Bottom.or_bottom
  type float_kind = Float32 | Float64
  val next_after : Fval.float_kind -> Fval.F.t -> Fval.F.t -> Fval.F.t
  val inject : Fval.F.t -> Fval.F.t -> Fval.t
  val inject_r_f :
    Fval.float_kind -> Fval.F.t -> Fval.F.t -> bool * bool * Fval.t
  val inject_r : Fval.F.t -> Fval.F.t -> bool * Fval.t
  val inject_f : Fval.float_kind -> Fval.F.t -> Fval.F.t -> Fval.t
  val inject_singleton : Fval.F.t -> Fval.t
  val compare_min : Fval.t -> Fval.t -> int
  val compare_max : Fval.t -> Fval.t -> int
  val min_and_max : Fval.t -> Fval.F.t * Fval.F.t
  val top : Fval.t
  val add : Fval.rounding_mode -> Fval.t -> Fval.t -> bool * Fval.t
  val sub : Fval.rounding_mode -> Fval.t -> Fval.t -> bool * Fval.t
  val mul : Fval.rounding_mode -> Fval.t -> Fval.t -> bool * Fval.t
  val div : Fval.rounding_mode -> Fval.t -> Fval.t -> bool * Fval.t
  val is_a_zero : Fval.t -> bool
  val fold_split : int -> (Fval.t -> '-> 'a) -> Fval.t -> '-> 'a
  val contains_zero : Fval.t -> bool
  val compare : Fval.t -> Fval.t -> int
  val pretty : Format.formatter -> Fval.t -> unit
  val pretty_overflow : Format.formatter -> Fval.t -> unit
  val hash : Fval.t -> int
  val zero : Fval.t
  val minus_zero : Fval.t
  val zeros : Fval.t
  val is_zero : Fval.t -> bool
  val is_included : Fval.t -> Fval.t -> bool
  val join : Fval.t -> Fval.t -> Fval.t
  val meet : Fval.t -> Fval.t -> Fval.t Bottom.or_bottom
  val narrow : Fval.t -> Fval.t -> Fval.t Bottom.or_bottom
  val contains_a_zero : Fval.t -> bool
  val is_singleton : Fval.t -> bool
  exception Not_Singleton_Float
  val project_float : Fval.t -> Fval.F.t
  val minus_one_one : Fval.t
  val subdiv_float_interval : size:int -> Fval.t -> Fval.t * Fval.t
  val neg : Fval.t -> Fval.t
  val cos : Fval.t -> Fval.t
  val sin : Fval.t -> Fval.t
  val atan2 : Fval.t -> Fval.t -> Fval.builtin_res
  val pow : Fval.t -> Fval.t -> Fval.builtin_res
  val powf : Fval.t -> Fval.t -> Fval.builtin_res
  val fmod : Fval.t -> Fval.t -> Fval.builtin_res
  val sqrt : Fval.rounding_mode -> Fval.t -> Fval.builtin_res
  val exp : Fval.rounding_mode -> Fval.t -> Fval.Builtin_alarms.t * Fval.t
  val log : Fval.rounding_mode -> Fval.t -> Fval.builtin_res
  val log10 : Fval.rounding_mode -> Fval.t -> Fval.builtin_res
  val floor : Fval.rounding_mode -> Fval.t -> Fval.Builtin_alarms.t * Fval.t
  val ceil : Fval.rounding_mode -> Fval.t -> Fval.Builtin_alarms.t * Fval.t
  val trunc : Fval.rounding_mode -> Fval.t -> Fval.Builtin_alarms.t * Fval.t
  val fround : Fval.rounding_mode -> Fval.t -> Fval.Builtin_alarms.t * Fval.t
  val expf : Fval.rounding_mode -> Fval.t -> Fval.Builtin_alarms.t * Fval.t
  val logf : Fval.rounding_mode -> Fval.t -> Fval.builtin_res
  val log10f : Fval.rounding_mode -> Fval.t -> Fval.builtin_res
  val sqrtf : Fval.rounding_mode -> Fval.t -> Fval.builtin_res
  val floorf : Fval.rounding_mode -> Fval.t -> Fval.Builtin_alarms.t * Fval.t
  val ceilf : Fval.rounding_mode -> Fval.t -> Fval.Builtin_alarms.t * Fval.t
  val truncf : Fval.rounding_mode -> Fval.t -> Fval.Builtin_alarms.t * Fval.t
  val froundf :
    Fval.rounding_mode -> Fval.t -> Fval.Builtin_alarms.t * Fval.t
  val widen : Fval.t -> Fval.t -> Fval.t
  val forward_comp :
    Abstract_interp.Comp.t -> Fval.t -> Fval.t -> Abstract_interp.Comp.result
  val diff : Fval.t -> Fval.t -> Fval.t Bottom.or_bottom
  val backward_comp_left :
    Abstract_interp.Comp.t ->
    bool -> Fval.float_kind -> Fval.t -> Fval.t -> Fval.t Bottom.or_bottom
  val cast_float_to_double_inverse : Fval.t -> Fval.t
  val enlarge_1ulp : Fval.float_kind -> Fval.t -> Fval.t
end