sig
  type prec = Float_sig.prec
  module type S =
    sig
      type float
      type widen_hints
      type t
      val packed_descr : Structural_descr.pack
      val compare : Float_interval_sig.S.t -> Float_interval_sig.S.t -> int
      val equal : Float_interval_sig.S.t -> Float_interval_sig.S.t -> bool
      val pretty : Stdlib.Format.formatter -> Float_interval_sig.S.t -> unit
      val hash : Float_interval_sig.S.t -> int
      val min_and_max :
        Float_interval_sig.S.t ->
        (Float_interval_sig.S.float * Float_interval_sig.S.float) option *
        bool
      val nan : Float_interval_sig.S.t
      val pos_infinity : Float_interval_sig.prec -> Float_interval_sig.S.t
      val neg_infinity : Float_interval_sig.prec -> Float_interval_sig.S.t
      val inject :
        ?nan:bool ->
        Float_interval_sig.S.float ->
        Float_interval_sig.S.float -> Float_interval_sig.S.t
      val singleton : Float_interval_sig.S.float -> Float_interval_sig.S.t
      val top : Float_interval_sig.prec -> Float_interval_sig.S.t
      val top_finite : Float_interval_sig.prec -> Float_interval_sig.S.t
      val is_included :
        Float_interval_sig.S.t -> Float_interval_sig.S.t -> bool
      val join :
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val widen :
        Float_interval_sig.S.widen_hints ->
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val narrow :
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t Bottom.Type.or_bottom
      val contains_a_zero : Float_interval_sig.S.t -> bool
      val contains_pos_zero : Float_interval_sig.S.t -> bool
      val contains_neg_zero : Float_interval_sig.S.t -> bool
      val contains_non_zero : Float_interval_sig.S.t -> bool
      val contains_pos_infinity : Float_interval_sig.S.t -> bool
      val contains_neg_infinity : Float_interval_sig.S.t -> bool
      val contains_nan : Float_interval_sig.S.t -> bool
      val is_singleton : Float_interval_sig.S.t -> bool
      val is_negative : Float_interval_sig.S.t -> Abstract_interp.Comp.result
      val is_finite : Float_interval_sig.S.t -> Abstract_interp.Comp.result
      val is_infinite : Float_interval_sig.S.t -> Abstract_interp.Comp.result
      val is_not_nan : Float_interval_sig.S.t -> Abstract_interp.Comp.result
      val backward_is_finite :
        positive:bool ->
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t Bottom.Type.or_bottom
      val backward_is_infinite :
        positive:bool ->
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t Bottom.Type.or_bottom
      val backward_is_nan :
        positive:bool ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t Bottom.Type.or_bottom
      val has_greater_min_bound :
        Float_interval_sig.S.t -> Float_interval_sig.S.t -> int
      val has_smaller_max_bound :
        Float_interval_sig.S.t -> Float_interval_sig.S.t -> int
      val forward_comp :
        Abstract_interp.Comp.t ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t -> Abstract_interp.Comp.result
      val backward_comp_left_true :
        Abstract_interp.Comp.t ->
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t Bottom.or_bottom
      val backward_comp_left_false :
        Abstract_interp.Comp.t ->
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t Bottom.Type.or_bottom
      val neg : Float_interval_sig.S.t -> Float_interval_sig.S.t
      val abs :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val add :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val sub :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val mul :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val div :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val floor : Float_interval_sig.S.t -> Float_interval_sig.S.t
      val ceil : Float_interval_sig.S.t -> Float_interval_sig.S.t
      val trunc : Float_interval_sig.S.t -> Float_interval_sig.S.t
      val fround : Float_interval_sig.S.t -> Float_interval_sig.S.t
      val exp :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val log :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val log10 :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val sqrt :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val pow :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val fmod :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val cos :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val sin :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val acos :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val asin :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val atan :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val atan2 :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val backward_add :
        Float_interval_sig.prec ->
        left:Float_interval_sig.S.t ->
        right:Float_interval_sig.S.t ->
        result:Float_interval_sig.S.t ->
        (Float_interval_sig.S.t * Float_interval_sig.S.t)
        Bottom.Type.or_bottom
      val backward_sub :
        Float_interval_sig.prec ->
        left:Float_interval_sig.S.t ->
        right:Float_interval_sig.S.t ->
        result:Float_interval_sig.S.t ->
        (Float_interval_sig.S.t * Float_interval_sig.S.t)
        Bottom.Type.or_bottom
      val forward_cast :
        dst:Float_interval_sig.prec ->
        Float_interval_sig.S.t -> Float_interval_sig.S.t
      val backward_cast :
        src:Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t Bottom.Type.or_bottom
      val cast_int_to_float :
        Float_interval_sig.prec ->
        Integer.t option -> Integer.t option -> Float_interval_sig.S.t
      val bits_of_float64_list :
        Float_interval_sig.S.t -> (Integer.t * Integer.t) list
      val bits_of_float32_list :
        Float_interval_sig.S.t -> (Integer.t * Integer.t) list
      val subdivide :
        Float_interval_sig.prec ->
        Float_interval_sig.S.t ->
        Float_interval_sig.S.t * Float_interval_sig.S.t
    end
end