Module BatBig_int


module BatBig_int: sig .. end
Operations on arbitrary-precision integers.

Big integers (type big_int or equivalently Big_int.t) are signed integers of arbitrary size. This module lets you compute with huge numbers, whose size is limited only by the amount of memory given to OCaml. The downside is speed, as big integers are much slower than any other type of integer known to OCaml.

This module extends Stdlib's Big_int module, go there for documentation on the rest of the functions and types.
Author(s): Valerie Menissier-Morain (base module), Gabriel Scherer, David Teller


type t = Big_int.big_int 
val zero : Big_int.big_int
val one : Big_int.big_int
val neg : Big_int.big_int -> Big_int.big_int
val succ : Big_int.big_int -> Big_int.big_int
val pred : Big_int.big_int -> Big_int.big_int
val abs : Big_int.big_int -> Big_int.big_int
val add : Big_int.big_int -> Big_int.big_int -> Big_int.big_int
val sub : Big_int.big_int -> Big_int.big_int -> Big_int.big_int
val mul : Big_int.big_int -> Big_int.big_int -> Big_int.big_int
val div : Big_int.big_int -> Big_int.big_int -> Big_int.big_int
val modulo : Big_int.big_int -> Big_int.big_int -> Big_int.big_int
val pow : Big_int.big_int -> Big_int.big_int -> Big_int.big_int
val to_string : Big_int.big_int -> string
val of_string : string -> Big_int.big_int
val to_int : Big_int.big_int -> int
val of_int : int -> Big_int.big_int
val compare : Big_int.big_int -> Big_int.big_int -> int
val (--) : Big_int.big_int -> Big_int.big_int -> Big_int.big_int BatEnum.t
val (---) : Big_int.big_int -> Big_int.big_int -> Big_int.big_int BatEnum.t
val (+) : t -> t -> t
val (-) : t -> t -> t
val ( * ) : t -> t -> t
val (/) : t -> t -> t
val ( ** ) : t -> t -> t
val (<>) : t -> t -> bool
val (>=) : t -> t -> bool
val (<=) : t -> t -> bool
val (>) : t -> t -> bool
val (<) : t -> t -> bool
val (=) : t -> t -> bool
val operations : t BatNumber.numeric

Arithmetic operations

val add_int_big_int : int -> Big_int.big_int -> Big_int.big_int
Addition of a small integer to a big integer.
val square_big_int : Big_int.big_int -> Big_int.big_int
Return the square of the given big integer
val sqrt_big_int : Big_int.big_int -> Big_int.big_int
sqrt_big_int a returns the integer square root of a, that is, the largest big integer r such that r * r <= a. Raise Invalid_argument if a is negative.
val quomod_big_int : Big_int.big_int -> Big_int.big_int -> Big_int.big_int * Big_int.big_int
Euclidean division of two big integers. The first part of the result is the quotient, the second part is the remainder. Writing (q,r) = quomod_big_int a b, we have a = q * b + r and 0 <= r < |b|. Raise Division_by_zero if the divisor is zero.
val power_int_positive_int : int -> int -> Big_int.big_int
val power_big_int_positive_int : Big_int.big_int -> int -> Big_int.big_int
val power_int_positive_big_int : int -> Big_int.big_int -> Big_int.big_int
val power_big_int_positive_big_int : Big_int.big_int -> Big_int.big_int -> Big_int.big_int
Exponentiation functions. Return the big integer representing the first argument a raised to the power b (the second argument). Depending on the function, a and b can be either small integers or big integers. Raise Invalid_argument if b is negative.

Comparisons and tests

val sign_big_int : Big_int.big_int -> int
Return 0 if the given big integer is zero, 1 if it is positive, and -1 if it is negative.
val compare_big_int : Big_int.big_int -> Big_int.big_int -> int
compare_big_int a b returns 0 if a and b are equal, 1 if a is greater than b, and -1 if a is smaller than b.
val eq_big_int : Big_int.big_int -> Big_int.big_int -> bool
val le_big_int : Big_int.big_int -> Big_int.big_int -> bool
val ge_big_int : Big_int.big_int -> Big_int.big_int -> bool
val lt_big_int : Big_int.big_int -> Big_int.big_int -> bool
val gt_big_int : Big_int.big_int -> Big_int.big_int -> bool
Usual boolean comparisons between two big integers.
val max_big_int : Big_int.big_int -> Big_int.big_int -> Big_int.big_int
Return the greater of its two arguments.
val min_big_int : Big_int.big_int -> Big_int.big_int -> Big_int.big_int
Return the smaller of its two arguments.
val num_digits_big_int : Big_int.big_int -> int
Return the number of machine words used to store the given big integer.

Conversions to and from strings

val string_of_big_int : Big_int.big_int -> string
Return the string representation of the given big integer, in decimal (base 10).
val big_int_of_string : string -> Big_int.big_int
Convert a string to a big integer, in decimal. The string consists of an optional - or + sign, followed by one or several decimal digits.

Conversions to and from other numerical types

val big_int_of_int : int -> Big_int.big_int
Convert a small integer to a big integer.
val is_int_big_int : Big_int.big_int -> bool
Test whether the given big integer is small enough to be representable as a small integer (type int) without loss of precision. On a 32-bit platform, is_int_big_int a returns true if and only if a is between 230 and 230-1. On a 64-bit platform, is_int_big_int a returns true if and only if a is between -262 and 262-1.
val int_of_big_int : Big_int.big_int -> int
Convert a big integer to a small integer (type int). Raises Failure "int_of_big_int" if the big integer is not representable as a small integer.
val float_of_big_int : Big_int.big_int -> float
Returns a floating-point number approximating the given big integer.

Boilerplate code


Printing

val print : 'a BatIO.output -> t -> unit