sig
  type round = Up | Down | Near | Zero
  type prec = Single | Double | Long_Double | Real
  module type S =
    sig
      type t
      val packed_descr : Structural_descr.pack
      val hash : Float_sig.S.t -> int
      val pretty : Stdlib.Format.formatter -> Float_sig.S.t -> unit
      val is_exact : Float_sig.prec -> bool
      val of_float :
        Float_sig.round -> Float_sig.prec -> float -> Float_sig.S.t
      val to_float : Float_sig.S.t -> float
      val cmp_ieee : Float_sig.S.t -> Float_sig.S.t -> int
      val compare : Float_sig.S.t -> Float_sig.S.t -> int
      val is_nan : Float_sig.S.t -> bool
      val is_finite : Float_sig.S.t -> bool
      val is_infinite : Float_sig.S.t -> bool
      val is_negative : Float_sig.S.t -> bool
      val round_to_precision :
        Float_sig.round -> Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t
      val next_float : Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t
      val prev_float : Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t
      val widen_up : Float_sig.S.t -> Float_sig.S.t
      val neg : Float_sig.S.t -> Float_sig.S.t
      val abs : Float_sig.S.t -> Float_sig.S.t
      val floor : Float_sig.S.t -> Float_sig.S.t
      val ceil : Float_sig.S.t -> Float_sig.S.t
      val trunc : Float_sig.S.t -> Float_sig.S.t
      val fround : Float_sig.S.t -> Float_sig.S.t
      val add :
        Float_sig.round ->
        Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t -> Float_sig.S.t
      val sub :
        Float_sig.round ->
        Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t -> Float_sig.S.t
      val mul :
        Float_sig.round ->
        Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t -> Float_sig.S.t
      val div :
        Float_sig.round ->
        Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t -> Float_sig.S.t
      val fmod :
        Float_sig.round ->
        Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t -> Float_sig.S.t
      val exp :
        Float_sig.round -> Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t
      val log :
        Float_sig.round -> Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t
      val log10 :
        Float_sig.round -> Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t
      val sqrt :
        Float_sig.round -> Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t
      val pow :
        Float_sig.round ->
        Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t -> Float_sig.S.t
      val cos :
        Float_sig.round -> Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t
      val sin :
        Float_sig.round -> Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t
      val atan2 :
        Float_sig.round ->
        Float_sig.prec -> Float_sig.S.t -> Float_sig.S.t -> Float_sig.S.t
    end
end