Skip to content

RandomInteger

Status: Stable

documented, exercised by the test suite and/or worked examples, with no known limitations recorded.

Description

RandomInteger[{imin, imax}]
    gives a pseudorandom integer in the range {imin, ..., imax}.
RandomInteger[imax]
    gives a pseudorandom integer in the range {0, ..., imax}.
RandomInteger[]
    pseudorandomly gives 0 or 1.
RandomInteger[range, n]
    gives a list of n pseudorandom integers.
RandomInteger[range, {n1, n2, ...}]
    gives an n1 x n2 x ... array of pseudorandom integers.

Examples

All examples below are verified against the current Mathilda build.

In[1]:= SeedRandom[42]; RandomInteger[]
Out[1]= 1

In[2]:= SeedRandom[42]; RandomInteger[10]
Out[2]= 9

In[3]:= SeedRandom[42]; RandomInteger[{1, 6}]
Out[3]= 2

In[4]:= SeedRandom[42]; RandomInteger[{0, 9}, 5]
Out[4]= {9, 9, 7, 1, 9}

In[5]:= SeedRandom[42]; Dimensions[RandomInteger[{0, 1}, {3, 4}]]
Out[5]= {3, 4}

In[6]:= SeedRandom[42]; RandomInteger[{-10, -5}]
Out[6]= -9

In[7]:= IntegerQ[RandomInteger[10^20]]
Out[7]= True

Implementation notes

Algorithm. builtin_randominteger (in src/random.c) draws uniform integers from a single global GMP random state, g_rand_state, lazily initialized by ensure_rand_init as a Mersenne Twister (gmp_randinit_mt) seeded from time(NULL) ^ clock(). A range is parsed by parse_range into mpz_t bounds: a bare n means [0, n], {a, b} means [a, b]. random_integer_range computes range = b - a + 1 and draws mpz_urandomm(result, g_rand_state, range) (rejection-free uniform over [0, range)), then adds a. The result is normalized via expr_bigint_normalize, so it demotes to EXPR_INTEGER when it fits and stays EXPR_BIGINT otherwise — arbitrarily large ranges are supported.

The RandomInteger[range, n] and RandomInteger[range, {n1, n2, ...}] forms produce a list or nested array via random_array, which recurses over the dimension spec drawing one element per leaf.

  • Protected.
  • RandomInteger[{imin, imax}] chooses integers in the range {imin, ..., imax} with equal probability.
  • RandomInteger[] gives 0 or 1 with probability 1/2.
  • RandomInteger gives a different sequence of pseudorandom integers whenever you run Mathilda. You can start with a particular seed using SeedRandom.
  • Returns bignums when the range exceeds 64-bit integer limits.

Attributes: Protected.

Implementation status

Stable — documented, exercised by the test suite and/or worked examples, with no known limitations recorded.

References