Module Tablecloth.Int Source Fixed precision integers
The platform-dependant signed integer type.
An int is a whole number.
ints are subject to overflow , meaning that Int.maximum_value + 1 = Int.minimum_value.
If you need to work with integers larger than maximum_value (or smaller than minimum_value you can use the Float module.
Valid syntax for ints includes:
0
42
9000
1_000_000
1_000_000
0xFF (* 255 in hexadecimal *)
0x000A (* 10 in hexadecimal *)Note: The number of bits used for an int is platform dependent.
OCaml uses 31-bits on 32-bit platforms and 63-bits on 64-bit platforms which means that int math is well-defined in the range -2 ** 30 to 2 ** 30 - 1 for 32bit platforms -2 ** 62 to 2 ** 62 - 1 for 64bit platforms.
Outside of that range, the behavior is determined by the compilation target.
You can read about the reasons for OCaml's unusual integer sizes here .
Historical Note: The name int comes from the term integer . It appears that the int abbreviation was introduced in the programming language ALGOL 68.
Today, almost all programming languages use this abbreviation.
ConstantsThe literal 0 as a named value.
The literal 1 as a named value.
The maximum representable int on the current platform.
The minimum representable int on the current platform.
CreateSource val from_string : string -> t optionAttempt to parse a string into a int.
Examples
Int.from_string "0" = Some 0Int.from_string "42" = Some 42Int.from_string "-3" = Some (-3)Int.from_string "123_456" = Some 123_456Int.from_string "0xFF" = Some 255Int.from_string "0x00A" = Some 10Int.from_string "Infinity" = NoneInt.from_string "NaN" = None OperatorsNote You do not need to open the Int module to use the (+) , (-) , (*) , (**) , (mod) or (/) operators, these are available as soon as you open Tablecloth
Add two Int numbers.
Int.add 3002 4004 = 7006Or using the globally available operator:
3002 + 4004 = 7006You cannot add an int and a float directly though.
See Float.add for why, and how to overcome this limitation.
Subtract numbers.
Examples
Int.subtract 4 3 = 1Alternatively the operator can be used:
4 - 3 = 1Multiply ints.
Examples
Int.multiply 2 7 = 14Alternatively the operator can be used:
(2 * 7) = 14Integer division.
Notice that the remainder is discarded.
Exceptions
Throws Division_by_zero when the divisor is 0.
Examples
Int.divide 3 ~by:2 = 127 / 5 = 5Floating point division.
Examples
Int.(3 /. 2) = 1.5Int.(27 /. 5) = 5.25Int.(8 /. 4) = 2.0Source val divide_float : by :t -> t -> floatFloating point division.
Examples
Int.divide_float 3 ~by:2 = 1.5Int.divide_float 27 ~by:5 = 5.25Int.divide_float 8 ~by:4 = 2.0Exponentiation, takes the base first, then the exponent.
Examples
Int.power ~base:7 ~exponent:3 = 343Alternatively the ** operator can be used:
7 ** 3 = 343Flips the 'sign' of an integer so that positive integers become negative and negative integers become positive. Zero stays as it is.
Examples
Int.negate 8 = (-8)Int.negate (-7) = 7Int.negate 0 = 0Alternatively the ~- operator can be used:
~-(7) = (-7)Get the absolute value of a number.
Examples
Int.absolute 8 = 8Int.absolute (-7) = 7Int.absolute 0 = 0Perform modular arithmetic .
If you intend to use modulo to detect even and odd numbers consider using Int.is_even or Int.is_odd .
The modulo function works in the typical mathematical way when you run into negative numbers
Use Int.remainder for a different treatment of negative numbers.
Examples
Int.modulo ~by:3 (-4) = 2Int.modulo ~by:3 (-3 )= 0Int.modulo ~by:3 (-2) = 1Int.modulo ~by:3 (-1) = 2Int.modulo ~by:3 0 = 0Int.modulo ~by:3 1 = 1Int.modulo ~by:3 2 = 2Int.modulo ~by:3 3 = 0Int.modulo ~by:3 4 = 1Source val remainder : t -> by :t -> t Get the remainder after division. Here are bunch of examples of dividing by four:
Use Int.modulo for a different treatment of negative numbers.
Examples
List.map
~f:(Int.remainder ~by:4)
[(-5); (-4); (-3); (-2); (-1); 0; 1; 2; 3; 4; 5] =
[(-1); 0; (-3); (-2); (-1); 0; 1; 2; 3; 0; 1]Returns the larger of two ints.
Examples
Int.maximum 7 9 = 9Int.maximum (-4) (-1) = (-1)Returns the smaller of two ints.
Examples
Int.minimum 7 9 = 7Int.minimum (-4) (-1) = (-4) QueryCheck if an int is even.
Examples
Int.is_even 8 = trueInt.is_even 7 = falseInt.is_even 0 = trueCheck if an int is odd.
Examples
Int.is_odd 7 = trueInt.is_odd 8 = falseInt.is_odd 0 = falseClamps n within the inclusive lower and upper bounds.
Exceptions
Throws an Invalid_argument exception if lower > upper
Examples
Int.clamp ~lower:0 ~upper:8 5 = 5Int.clamp ~lower:0 ~upper:8 9 = 8Int.clamp ~lower:(-10) ~upper:(-5) 5 = (-5)Source val in_range : t -> lower :t -> upper :t -> boolChecks if n is between lower and up to, but not including, upper.
Exceptions
Throws an Invalid_argument exception if lower > upper
Examples
Int.in_range ~lower:2 ~upper:4 3 = trueInt.in_range ~lower:5 ~upper:8 4 = falseInt.in_range ~lower:(-6) ~upper:(-2) (-3) = true ConvertConvert an int into a float. Useful when mixing Int and Float values like this:
Examples
let half_of (number : int) : float =
Float.((Int.to_float number) / 2.)
(* Note that locally opening the {!Float} module here allows us to use the floating point division operator *)
in
half_of 7 = 3.5Convert an int into a string representation.
Guarantees that
Int.(from_string (to_string n)) = Some n Examples
Int.to_string 3 = "3"Int.to_string (-3) = "-3"Int.to_string 0 = "0" CompareTest two ints for equality.