Pseudo-random integers in C
Pseudo-random numbers are useful when you want to introduce an element to fund predictability. Normally, programs behave "deterministically," meaning the behavior of the program is entirety predictable based on its inputs.
rand()
generates (pseudo) random integer between 0
and RAND_MAX
which
is a large positive integer.
- Distribution is uniform, meaning each value in range is equally likely to be generated.
The random number generated is not random at all. The pseudo random sequence of integer is based on a seed, which determines the sequence of number that will be generated.
-
Different seed --> different sequence of pseudo random values.
srand( unsigned int )
sets the seed value. By default (no arguments), the seed 1
is
used. Use srand(time(0))
to generate time dependent random integer (time.h
) is
required.
Generate pseudo-random integers in a specific range
The modulus (%
) operator is useful for constrain the range of values generated by
rand()
.
Examples (code
range (inclusive)):
rand()
0 to RAND_MAXrand() % 100
0 to 99rand() % 101
0 to 100(rand() % 101) - 50
-50 to 50
Generating pseudo-random floating point values
One way is to map a range of integer into real numbers.
Examples (code
range (inclusive)):
((rand() % 100000 / 100000.0)
0.0 to 0.99999((rand() % 100001 / 100000.0)
0.0 to 1.0
Increasing the size of the range improves the "granularity" of the values generated. Finest granularity for
generating values between 0 and 1 (inclusive): rand() / (double)(RAND_MAX -1)