Pseudo Random Numbers
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() % 1000 to 99rand() % 1010 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)
Linked from Intermediate Programming