The num library (distributed in contrib/libnum) implements exact-precision rational arithmetic. It is built upon the state-of-the-art BigNum arbitrary-precision integer arithmetic package, and therefore achieves very high performance.
The functions provided in this library are fully documented in The CAML Numbers Reference Manual by Valérie Ménissier-Morain, technical report 141, INRIA, july 1992 (available by anonymous FTP from ftp.inria.fr, directory INRIA/publications/RT, file RT-0141.ps.Z). A summary of the functions is given below.
Programs that use the num library must be linked in ``custom runtime'' mode, as follows:
camlc -custom other options nums.zo other files -lnumsFor interactive use of the num library, run camllight camlnum.
type num = Int of int | Big_int of big_int | Ratio of ratio
value normalize_num : num -> num value numerator_num : num -> num value denominator_num : num -> num
value prefix +/ : num -> num -> num value add_num : num -> num -> num
value minus_num : num -> num
value prefix -/ : num -> num -> num value sub_num : num -> num -> num
value prefix */ : num -> num -> num value mult_num : num -> num -> num
value square_num : num -> num
value prefix // : num -> num -> num value div_num : num -> num -> num
value quo_num : num -> num -> num value mod_num : num -> num -> num
value prefix **/ : num -> num -> num value power_num : num -> num -> num
value is_integer_num : num -> bool
value integer_num : num -> num value floor_num : num -> num value round_num : num -> num value ceiling_num : num -> num
value sign_num : num -> int
value prefix =/ : num -> num -> bool value prefix </ : num -> num -> bool value prefix >/ : num -> num -> bool value prefix <=/ : num -> num -> bool value prefix >=/ : num -> num -> bool value prefix <>/ : num -> num -> bool value eq_num : num -> num -> bool value lt_num : num -> num -> bool value le_num : num -> num -> bool value gt_num : num -> num -> bool value ge_num : num -> num -> bool
value compare_num : num -> num -> int
value max_num : num -> num -> num value min_num : num -> num -> num
value abs_num : num -> num
value succ_num: num -> num
value pred_num: num -> num
value incr_num: num ref -> unit
value decr_num: num ref -> unit
value string_of_num : num -> string
value approx_num_fix : int -> num -> string value approx_num_exp : int -> num -> string
value num_of_string : string -> num
value int_of_num : num -> int value num_of_int : int -> num value nat_of_num : num -> nat__nat value num_of_nat : nat__nat -> num value num_of_big_int : big_int -> num value big_int_of_num : num -> big_int value ratio_of_num : num -> ratio value num_of_ratio : ratio -> num value float_of_num : num -> float value num_of_float : float -> num value sys_print_num : int -> string -> num -> string -> unit value print_num : num -> unit
value arith_status: unit -> unit
value get_error_when_null_denominator : unit -> bool value set_error_when_null_denominator : bool -> unit
value get_normalize_ratio : unit -> bool value set_normalize_ratio : bool -> unit
value get_normalize_ratio_when_printing : unit -> bool value set_normalize_ratio_when_printing : bool -> unit
value get_approx_printing : unit -> bool value set_approx_printing : bool -> unit
value get_floating_precision : unit -> int value set_floating_precision : int -> unit