Module Batteries_uni.Number


module Number: BatNumber

exception Overflow
Arithmetic overflow.

This kind of exception is raised by "safe" numeric modules whenever the number which should be returned is too large to be represented.

Non-"safe" numeric modules will return a result which depends on the internal representation. For instance, with module Int, max_num + 1 returns min_num. By opposition, with module Safe_int, max_num + 1 raises Overflow.

exception NaN
Not a Number

This kind of exception is raised by "safe" modules whenever the number which should be returned is not a number.

For instance, with module Safe_float, 0.0 / 0.0 raises NaN. By opposition, with module Float, 0.0 / 0.0 does not interrupt computation and returns a special value nan.


type 'a numeric = {
   zero : 'a;
   one : 'a;
   neg : 'a -> 'a;
   succ : 'a -> 'a;
   pred : 'a -> 'a;
   abs : 'a -> 'a;
   add : 'a -> 'a -> 'a;
   sub : 'a -> 'a -> 'a;
   mul : 'a -> 'a -> 'a;
   div : 'a -> 'a -> 'a;
   modulo : 'a -> 'a -> 'a;
   pow : 'a -> 'a -> 'a;
   compare : 'a -> 'a -> int;
   of_int : int -> 'a;
   to_int : 'a -> int;
   of_string : string -> 'a;
   to_string : 'a -> string;
   of_float : float -> 'a;
   to_float : 'a -> float;
}
The smallest set of operations supported by every set of numbers.

This is presented as record to permit lightweight typeclass-style computation.

module type Numeric = sig .. end
The full set of operations of a type of numbers
module type Bounded = sig .. end
module type Discrete = sig .. end