sig
  type t = float
  val zero : float
  val one : float
  external neg : float -> float = "%negfloat"
  val succ : float -> float
  val pred : float -> float
  external abs : float -> float = "%absfloat"
  val add : float -> float -> float
  val sub : float -> float -> float
  val mul : float -> float -> float
  val div : float -> float -> float
  external modulo : float -> float -> float = "caml_fmod_float" "fmod"
    [@@unboxed] [@@noalloc]
  external pow : float -> float -> float = "caml_power_float" "pow"
    [@@unboxed] [@@noalloc]
  val compare : float -> float -> int
  val equal : float -> float -> bool
  val ord : float -> float -> BatOrd.order
  external of_int : int -> float = "%floatofint"
  external to_int : float -> int = "%intoffloat"
  external of_float : float -> float = "%identity"
  external to_float : float -> float = "%identity"
  val of_string : string -> float
  val to_string : float -> string
  external ( + ) : BatFloat.t -> BatFloat.t -> BatFloat.t = "%addfloat"
  external ( - ) : BatFloat.t -> BatFloat.t -> BatFloat.t = "%subfloat"
  external ( * ) : BatFloat.t -> BatFloat.t -> BatFloat.t = "%mulfloat"
  external ( / ) : BatFloat.t -> BatFloat.t -> BatFloat.t = "%divfloat"
  external ( ** ) : BatFloat.t -> BatFloat.t -> BatFloat.t
    = "caml_power_float" "pow" [@@unboxed] [@@noalloc]
  val min : float -> float -> float
  val max : float -> float -> float
  val ( -- ) : BatFloat.t -> BatFloat.t -> BatFloat.t BatEnum.t
  val ( --- ) : BatFloat.t -> BatFloat.t -> BatFloat.t BatEnum.t
  val operations : BatFloat.t BatNumber.numeric
  external sqrt : float -> float = "caml_sqrt_float" "sqrt" [@@unboxed]
    [@@noalloc]
  external exp : float -> float = "caml_exp_float" "exp" [@@unboxed]
    [@@noalloc]
  external log : float -> float = "caml_log_float" "log" [@@unboxed]
    [@@noalloc]
  external log10 : float -> float = "caml_log10_float" "log10" [@@unboxed]
    [@@noalloc]
  external cos : float -> float = "caml_cos_float" "cos" [@@unboxed]
    [@@noalloc]
  external sin : float -> float = "caml_sin_float" "sin" [@@unboxed]
    [@@noalloc]
  external tan : float -> float = "caml_tan_float" "tan" [@@unboxed]
    [@@noalloc]
  external acos : float -> float = "caml_acos_float" "acos" [@@unboxed]
    [@@noalloc]
  external asin : float -> float = "caml_asin_float" "asin" [@@unboxed]
    [@@noalloc]
  external atan : float -> float = "caml_atan_float" "atan" [@@unboxed]
    [@@noalloc]
  external atan2 : float -> float -> float = "caml_atan2_float" "atan2"
    [@@unboxed] [@@noalloc]
  external cosh : float -> float = "caml_cosh_float" "cosh" [@@unboxed]
    [@@noalloc]
  external sinh : float -> float = "caml_sinh_float" "sinh" [@@unboxed]
    [@@noalloc]
  external tanh : float -> float = "caml_tanh_float" "tanh" [@@unboxed]
    [@@noalloc]
  external ceil : float -> float = "caml_ceil_float" "ceil" [@@unboxed]
    [@@noalloc]
  external floor : float -> float = "caml_floor_float" "floor" [@@unboxed]
    [@@noalloc]
  val round : float -> float
  val round_to_int : float -> int
  val round_to_string : ?digits:int -> float -> string
  val root : float -> int -> float
  val signbit : float -> bool
  val copysign : float -> float -> float
  val is_nan : float -> bool
  val is_special : float -> bool
  val is_finite : float -> bool
  val infinity : float
  val neg_infinity : float
  val nan : float
  val epsilon : float
  val e : float
  val log2e : float
  val log10e : float
  val ln2 : float
  val ln10 : float
  val pi : float
  val pi2 : float
  val pi4 : float
  val invpi : float
  val invpi2 : float
  val sqrtpi2 : float
  val sqrt2 : float
  val invsqrt2 : float
  external frexp : float -> float * int = "caml_frexp_float"
  external ldexp : float -> int -> float = "caml_ldexp_float"
  external modf : float -> float * float = "caml_modf_float"
  type fpkind =
    Stdlib.Pervasives.fpclass =
      FP_normal
    | FP_subnormal
    | FP_zero
    | FP_infinite
    | FP_nan
  external classify : float -> BatFloat.fpkind = "caml_classify_float"
  val approx_equal : ?epsilon:float -> float -> float -> bool
  module Infix :
    sig
      type bat__infix_t = t
      val ( + ) : bat__infix_t -> bat__infix_t -> bat__infix_t
      val ( - ) : bat__infix_t -> bat__infix_t -> bat__infix_t
      val ( * ) : bat__infix_t -> bat__infix_t -> bat__infix_t
      val ( / ) : bat__infix_t -> bat__infix_t -> bat__infix_t
      val ( ** ) : bat__infix_t -> bat__infix_t -> bat__infix_t
      val ( -- ) : bat__infix_t -> bat__infix_t -> bat__infix_t BatEnum.t
      val ( --- ) : bat__infix_t -> bat__infix_t -> bat__infix_t BatEnum.t
      val ( =~ ) : ?epsilon:float -> float -> float -> bool
    end
  module Compare :
    sig
      type bat__compare_t = t
      val ( <> ) : bat__compare_t -> bat__compare_t -> bool
      val ( >= ) : bat__compare_t -> bat__compare_t -> bool
      val ( <= ) : bat__compare_t -> bat__compare_t -> bool
      val ( > ) : bat__compare_t -> bat__compare_t -> bool
      val ( < ) : bat__compare_t -> bat__compare_t -> bool
      val ( = ) : bat__compare_t -> bat__compare_t -> bool
    end
  type bat__refops_t = t
  val ( += ) : bat__refops_t ref -> bat__refops_t -> unit
  val ( -= ) : bat__refops_t ref -> bat__refops_t -> unit
  val ( *= ) : bat__refops_t ref -> bat__refops_t -> unit
  val ( /= ) : bat__refops_t ref -> bat__refops_t -> unit
  type bounded = t
  val min_num : bounded
  val max_num : bounded
  val print : (BatFloat.t, 'a) BatIO.printer
  module Safe_float :
    sig
      type t = float
      val zero : float
      val one : float
      val neg : float -> float
      val succ : float -> float
      val pred : float -> float
      val abs : float -> float
      val add : float -> float -> float
      val sub : float -> float -> float
      val mul : float -> float -> float
      val div : float -> float -> float
      val modulo : float -> float -> float
      val pow : float -> float -> float
      val compare : float -> float -> int
      val of_int : int -> float
      val to_int : float -> int
      external of_float : float -> float = "%identity"
      external to_float : float -> float = "%identity"
      val of_string : string -> float
      val to_string : float -> string
      val ( + ) :
        BatFloat.Safe_float.t ->
        BatFloat.Safe_float.t -> BatFloat.Safe_float.t
      val ( - ) :
        BatFloat.Safe_float.t ->
        BatFloat.Safe_float.t -> BatFloat.Safe_float.t
      val ( * ) :
        BatFloat.Safe_float.t ->
        BatFloat.Safe_float.t -> BatFloat.Safe_float.t
      val ( / ) :
        BatFloat.Safe_float.t ->
        BatFloat.Safe_float.t -> BatFloat.Safe_float.t
      val ( ** ) :
        BatFloat.Safe_float.t ->
        BatFloat.Safe_float.t -> BatFloat.Safe_float.t
      val operations : BatFloat.Safe_float.t BatNumber.numeric
      type bounded = t
      val min_num : bounded
      val max_num : bounded
      val exp : float -> float
      val log : float -> float
      val log10 : float -> float
      val cos : float -> float
      val sin : float -> float
      val tan : float -> float
      val acos : float -> float
      val asin : float -> float
      val atan : float -> float
      val atan2 : float -> float -> float
      val cosh : float -> float
      val sinh : float -> float
      val tanh : float -> float
      val ceil : float -> float
      val floor : float -> float
      val infinity : float
      val neg_infinity : float
      val nan : float
      val is_nan : float -> bool
      val epsilon : float
      val pi : float
      val frexp : float -> float * int
      val ldexp : float -> int -> float
      val modf : float -> float * float
      type fpkind =
        Stdlib.Pervasives.fpclass =
          FP_normal
        | FP_subnormal
        | FP_zero
        | FP_infinite
        | FP_nan
      external classify : float -> BatFloat.Safe_float.fpkind
        = "caml_classify_float"
      val print : 'BatInnerIO.output -> BatFloat.Safe_float.t -> unit
    end
end