(** Longitude module *) type t (** {2 Construction} *) val create : float -> t (** Normalizes to [-180, 180] *) val of_dms : degree:int -> minute:int -> second:float -> t val unsafe_create : float -> t (** {2 Accessors} *) val to_float : t -> float val degree : t -> int val minute : t -> int val second : t -> float val decimal_minute : t -> float val hemisphere : t -> [`E | `W] (** {2 Range operations} *) val normalize_180 : float -> float (** Normalize any value to [-180, 180] *) val normalize_360 : float -> float (** Normalize any value to [0, 360] *) val to_range_180 : t -> float val to_range_360 : t -> float (** {2 Operations} *) val add : t -> float -> t val sub : t -> float -> t val neg : t -> t val abs : t -> float (** {2 Comparison} *) val equal : t -> t -> bool val compare : t -> t -> int val ( = ) : t -> t -> bool val ( < ) : t -> t -> bool val ( > ) : t -> t -> bool val ( <= ) : t -> t -> bool val ( >= ) : t -> t -> bool (** {2 Formatting} *) val to_string : t -> string val format : ?precision:int -> t -> string val to_dms_string : t -> string (** Format as "DDD°MM'SS.S\"E" *)