sig
  type t
  exception Invalid_conversion of SIunits.Value.t * SIunits.Unit.d
  exception Invalid_units of SIunits.Value.t * SIunits.Value.t * string
  val value : float -> SIunits.Unit.t -> SIunits.Value.t
  val ( %< ) : float -> SIunits.Unit.t -> SIunits.Value.t
  val units_of : SIunits.Value.t -> SIunits.Unit.t
  val ( =. ) : float -> float -> bool
  val ( =!. ) : float -> float -> bool
  val float_eq : ?rel:float -> ?abs:float -> unit -> float -> float -> bool
  val eq : SIunits.Value.t -> SIunits.Value.t -> bool
  val ( =: ) : SIunits.Value.t -> SIunits.Value.t -> bool
  val eq_units : SIunits.Value.t -> SIunits.Value.t -> bool
  val ( =?: ) : SIunits.Value.t -> SIunits.Value.t -> bool
  val assign : SIunits.Value.t Pervasives.ref -> SIunits.Value.t -> unit
  val ( <-: ) : SIunits.Value.t Pervasives.ref -> SIunits.Value.t -> unit
  val get : SIunits.Value.t Pervasives.ref -> float
  val ( !: ) : SIunits.Value.t Pervasives.ref -> float
  val scale_to : SIunits.Value.t -> SIunits.Unit.t -> float
  val ( %> ) : SIunits.Value.t -> SIunits.Unit.t -> float
  val convert :
    value:float -> from:SIunits.Unit.t -> into:SIunits.Unit.t -> float
  val ( +: ) : SIunits.Value.t -> SIunits.Value.t -> SIunits.Value.t
  val ( -: ) : SIunits.Value.t -> SIunits.Value.t -> SIunits.Value.t
  val ( *: ) : SIunits.Value.t -> SIunits.Value.t -> SIunits.Value.t
  val ( /: ) : SIunits.Value.t -> SIunits.Value.t -> SIunits.Value.t
  val ( *:. ) : SIunits.Value.t -> float -> SIunits.Value.t
  val ( /:. ) : SIunits.Value.t -> float -> SIunits.Value.t
  val ( /.: ) : float -> SIunits.Value.t -> SIunits.Value.t
end