# Module Num

    module Num: sig .. end

Operation on arbitrary-precision numbers.

Numbers (type `num`) are arbitrary-precision rational numbers, plus the special elements `1/0` (infinity) and `0/0` (undefined).

    type num =

`|` | `Int of `int``
`|` | `Big_int of `Big_int.big_int``
`|` | `Ratio of `Ratio.ratio``

The type of numbers.

###### Arithmetic operations

    val (+/) : num -> num -> num

Same as `Num.add_num`.

    val add_num : num -> num -> num

Addition

    val minus_num : num -> num

Unary negation.

    val (-/) : num -> num -> num

Same as `Num.sub_num`.

    val sub_num : num -> num -> num

Subtraction

    val ( */ ) : num -> num -> num

Same as `Num.mult_num`.

    val mult_num : num -> num -> num

Multiplication

    val square_num : num -> num

Squaring

    val (//) : num -> num -> num

Same as `Num.div_num`.

    val div_num : num -> num -> num

Division

    val quo_num : num -> num -> num

Euclidean division: quotient.

    val mod_num : num -> num -> num

Euclidean division: remainder.

    val ( **/ ) : num -> num -> num

Same as `Num.power_num`.

    val power_num : num -> num -> num

Exponentiation

    val abs_num : num -> num

Absolute value.

    val succ_num : num -> num

`succ n` is `n+1`

    val pred_num : num -> num

`pred n` is `n-1`

    val incr_num : num ref -> unit

`incr r` is `r:=!r+1`, where `r` is a reference to a number.

    val decr_num : num ref -> unit

`decr r` is `r:=!r-1`, where `r` is a reference to a number.

    val is_integer_num : num -> bool

Test if a number is an integer
The four following functions approximate a number by an integer :

    val integer_num : num -> num

`integer_num n` returns the integer closest to `n`. In case of ties, rounds towards zero.

    val floor_num : num -> num

`floor_num n` returns the largest integer smaller or equal to `n`.

    val round_num : num -> num

`round_num n` returns the integer closest to `n`. In case of ties, rounds off zero.

    val ceiling_num : num -> num

`ceiling_num n` returns the smallest integer bigger or equal to `n`.

    val sign_num : num -> int

Return `-1`, `0` or `1` according to the sign of the argument.
Comparisons between numbers

    val (=/) : num -> num -> bool

    val (</) : num -> num -> bool

    val (>/) : num -> num -> bool

    val (<=/) : num -> num -> bool

    val (>=/) : num -> num -> bool

    val (<>/) : num -> num -> bool

    val eq_num : num -> num -> bool

    val lt_num : num -> num -> bool

    val le_num : num -> num -> bool

    val gt_num : num -> num -> bool

    val ge_num : num -> num -> bool

    val compare_num : num -> num -> int

Return `-1`, `0` or `1` if the first argument is less than, equal to, or greater than the second argument.

    val max_num : num -> num -> num

Return the greater of the two arguments.

    val min_num : num -> num -> num

Return the smaller of the two arguments.

###### Coercions with strings

    val string_of_num : num -> string

Convert a number to a string, using fractional notation.

    val approx_num_fix : int -> num -> string

See `Num.approx_num_exp`.

    val approx_num_exp : int -> num -> string

Approximate a number by a decimal. The first argument is the required precision. The second argument is the number to approximate. `Num.approx_num_fix` uses decimal notation; the first argument is the number of digits after the decimal point. `approx_num_exp` uses scientific (exponential) notation; the first argument is the number of digits in the mantissa.

    val num_of_string : string -> num

Convert a string to a number. Raise `Failure "num_of_string"` if the given string is not a valid representation of an integer

###### Coercions between numerical types

    val int_of_num : num -> int

    val num_of_int : int -> num

    val nat_of_num : num -> Nat.nat

    val num_of_nat : Nat.nat -> num

    val num_of_big_int : Big_int.big_int -> num

    val big_int_of_num : num -> Big_int.big_int

    val ratio_of_num : num -> Ratio.ratio

    val num_of_ratio : Ratio.ratio -> num

    val float_of_num : num -> float