OCaml's native integer type.
The number of bits in an integer is platform dependent, being 31-bits on a 32-bit
platform, and 63-bits on a 64-bit platform. int
is a signed integer type. int
s
are also subject to overflow, meaning that Int.max_value + 1 = Int.min_value
.
int
s always fit in a machine word.
gen_between
and obs_between
produce generators and observers for values
satisfying lower_bound
and upper_bound
. Both functions raise an exception if
no values satisfy both lower_bound
and upper_bound
.
delimiter
is underscore by default
The number of bits available in this integer type. Note that the integer representations are signed
There are two pairs of integer division and remainder functions, /%
and %
, and
/
and rem
. They both satisfy the same equation relating the quotient and the
remainder:
x = (x /% y) * y + (x % y);
x = (x / y) * y + (rem x y);
The functions return the same values if x
and y
are positive. They all raise
if y = 0
.
The functions differ if x < 0
or y < 0
.
If y < 0
, then %
and /%
raise, whereas /
and rem
do not.
x % y
always returns a value between 0 and y - 1
, even when x < 0
. On the
other hand, rem x y
returns a negative value if and only if x < 0
; that value
satisfies abs (rem x y) <= abs y - 1
.
round
rounds an int to a multiple of a given to_multiple_of
argument, according
to a direction dir
, with default dir
being `Nearest
. round
will raise if
to_multiple_of <= 0
.
| `Down | rounds toward Int.neg_infinity | | `Up | rounds toward Int.infinity | | `Nearest | rounds to the nearest multiple, or `Up in case of a tie | | `Zero | rounds toward zero |
Here are some examples for round ~to_multiple_of:10
for each direction:
| `Down | {10 .. 19} --> 10 | { 0 ... 9} --> 0 | {-10 ... -1} --> -10 | | `Up | { 1 .. 10} --> 10 | {-9 ... 0} --> 0 | {-19 .. -10} --> -10 | | `Zero | {10 .. 19} --> 10 | {-9 ... 9} --> 0 | {-19 .. -10} --> -10 | | `Nearest | { 5 .. 14} --> 10 | {-5 ... 4} --> 0 | {-15 ... -6} --> -10 |
For convenience and performance, there are variants of round
with dir
hard-coded.
If you are writing performance-critical code you should use these.
The largest representable integer
The smallest representable integer
The smallest representable integer
The results are unspecified for negative shifts and shifts >= num_bits
ceil_pow2 x
returns the smallest power of 2 that is greater than or equal to x
.
The implementation may only be called for x > 0
. Example: ceil_pow2 17 = 32