sig
  type kind = Float_sig.prec = Single | Double | Long_Double | Real
  val pretty_kind : Stdlib.Format.formatter -> Fval.kind -> unit
  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 : Stdlib.Format.formatter -> Fval.F.t -> unit
      val pretty_normal :
        use_hex:bool -> Stdlib.Format.formatter -> Fval.F.t -> unit
      val plus_zero : Fval.F.t
      val is_finite : Fval.F.t -> bool
      val next_float : Fval.kind -> float -> float
      val prev_float : Fval.kind -> float -> float
    end
  type t
  val packed_descr : Structural_descr.pack
  val compare : t -> t -> int
  val equal : t -> t -> bool
  val pretty : Format.formatter -> t -> unit
  val hash : t -> int
  val min_and_max : t -> (F.t * F.t) option * bool
  val nan : t
  val pos_infinity : Float_interval_sig.prec -> t
  val neg_infinity : Float_interval_sig.prec -> t
  val singleton : F.t -> t
  val top_finite : Float_interval_sig.prec -> t
  val is_included : t -> t -> bool
  val join : t -> t -> t
  val widen : Fc_float.widen_hints -> Float_interval_sig.prec -> t -> t -> t
  val narrow : t -> t -> t Lattice_bounds.or_bottom
  val contains_a_zero : t -> bool
  val contains_pos_zero : t -> bool
  val contains_neg_zero : t -> bool
  val contains_non_zero : t -> bool
  val contains_pos_infinity : t -> bool
  val contains_neg_infinity : t -> bool
  val contains_nan : t -> bool
  val is_negative : t -> Abstract_interp.Comp.result
  val is_finite : t -> Abstract_interp.Comp.result
  val is_infinite : t -> Abstract_interp.Comp.result
  val is_not_nan : t -> Abstract_interp.Comp.result
  val backward_is_finite :
    positive:bool ->
    Float_interval_sig.prec -> t -> t Lattice_bounds.or_bottom
  val backward_is_infinite :
    positive:bool ->
    Float_interval_sig.prec -> t -> t Lattice_bounds.or_bottom
  val backward_is_nan : positive:bool -> t -> t Lattice_bounds.or_bottom
  val has_greater_min_bound : t -> t -> int
  val has_smaller_max_bound : t -> t -> int
  val forward_comp :
    Abstract_interp.Comp.t -> t -> t -> Abstract_interp.Comp.result
  val backward_comp_left_true :
    Abstract_interp.Comp.t ->
    Float_interval_sig.prec -> t -> t -> t Lattice_bounds.or_bottom
  val backward_comp_left_false :
    Abstract_interp.Comp.t ->
    Float_interval_sig.prec -> t -> t -> t Lattice_bounds.or_bottom
  val neg : t -> t
  val abs : Float_interval_sig.prec -> t -> t
  val add : Float_interval_sig.prec -> t -> t -> t
  val sub : Float_interval_sig.prec -> t -> t -> t
  val mul : Float_interval_sig.prec -> t -> t -> t
  val div : Float_interval_sig.prec -> t -> t -> t
  val sqrt : Float_interval_sig.prec -> t -> t
  val pow : Float_interval_sig.prec -> t -> t -> t
  val fmod : Float_interval_sig.prec -> t -> t -> t
  val cos : Float_interval_sig.prec -> t -> t
  val sin : Float_interval_sig.prec -> t -> t
  val acos : Float_interval_sig.prec -> t -> t
  val asin : Float_interval_sig.prec -> t -> t
  val atan : Float_interval_sig.prec -> t -> t
  val atan2 : Float_interval_sig.prec -> t -> t -> t
  val backward_add :
    Float_interval_sig.prec ->
    left:t -> right:t -> result:t -> (t * t) Lattice_bounds.or_bottom
  val backward_sub :
    Float_interval_sig.prec ->
    left:t -> right:t -> result:t -> (t * t) Lattice_bounds.or_bottom
  val forward_cast : dst:Float_interval_sig.prec -> t -> t
  val backward_cast :
    src:Float_interval_sig.prec -> t -> t Lattice_bounds.or_bottom
  val cast_int_to_float :
    Float_interval_sig.prec -> Integer.t option -> Integer.t option -> t
  val bits_of_float64_list : t -> (Integer.t * Integer.t) list
  val bits_of_float32_list : t -> (Integer.t * Integer.t) list
  val subdivide : Float_interval_sig.prec -> t -> t * t
  val round_to_single_precision_float : t -> t
  val inject : ?nan:bool -> Fval.kind -> Fval.F.t -> Fval.F.t -> t
  val inject_singleton : Fval.F.t -> t
  val top : t
  val plus_zero : t
  val minus_zero : t
  val zeros : t
  val pi : t
  val e : t
  val contains_plus_zero : t -> bool
  val meet : t -> t -> t Lattice_bounds.or_bottom
  val is_singleton : t -> bool
  exception Not_Singleton_Float
  val project_float : t -> Fval.F.t
  val subdiv_float_interval : Fval.kind -> t -> t * t
  val exp : Fval.kind -> t -> t
  val log : Fval.kind -> t -> t
  val log10 : Fval.kind -> t -> t
  val floor : Fval.kind -> t -> t
  val ceil : Fval.kind -> t -> t
  val trunc : Fval.kind -> t -> t
  val fround : Fval.kind -> t -> t
  val backward_cast_float_to_double : t -> t Lattice_bounds.or_bottom
  val backward_cast_double_to_real : t -> t
  val kind : Cil_types.fkind -> Fval.kind
end