rand | Generate random number (function) |
srand | Initialize random number generator (functions) |
c/c++产生随机数需要用到c库中的两个函数:srand和rand。srand函数用来设置随机数种子,初始化随机数生成器;rand函数用来产生随机数。两个函数的介绍和使用示例如下:
srand
function
void srand ( unsigned int seed );
Initialize random number generator
The pseudo-random number generator is initialized using the argument passed as seed.
For every different seed value used in a call to srand, the pseudo-random number generator can be expected to generate a different succession of results in the subsequent calls to rand.
Two different initializations with the same seed, instructs the pseudo-random generator to generate the same succession of results for the subsequent calls to rand in both cases.
If seed is set to 1, the generator is reinitialized to its initial value and produces the same values as before any call to rand or srand.
In order to generate random-like numbers, srand is usually initialized to some distinctive value, like those related with the execution time. For example, the value returned by the function time (declared in header <ctime>) is different each second, which is distinctive enough for most randoming needs.
Parameters
seed: An integer value to be used as seed by the pseudo-random number generator algorithm.
Example
/* srand example */#include#include #include int main (){ printf ("First number: %d\n", rand() % 100); srand ( time(NULL) ); printf ("Random number: %d\n", rand() % 100); srand ( 1 ); printf ("Again the first number: %d\n", rand() %100); return 0;}
Output:
First number: 41
Random number: 13
Again the first number: 4
rand
function
int rand ( void );
Generate random number
Returns a pseudo-random integral number in the range 0 to RAND_MAX.
This number is generated by an algorithm that returns a sequence of apparently non-related numbers each time it is called. This algorithm uses a seed to generate the series, which should be initialized to some distinctive value using srand.
RAND_MAX is a constant defined in <cstdlib>. Its default value may vary between implementations but it is granted to be at least 32767.
A typical way to generate pseudo-random numbers in a determined range using rand is to use the modulo of the returned value by the range span(跨度) and add the initial value of the range:
( value % 100 ) is in the range 0 to 99
( value % 100 + 1 ) is in the range 1 to 100
( value % 30 + 1985 ) is in the range 1985 to 2014
Notice though that this modulo operation does not generate a truly uniformly distributed(均匀分布) random number in the span (since in most cases lower numbers are slightly more likely), but it is generally a good approximation for short spans.
Return Value
An integer value between 0 and RAND_MAX.
Example (一个简单的猜数游戏)
/* rand example: guess the number */#include#include #include int main (){ int iSecret, iGuess; /* initialize random seed: */ srand ( time(NULL) ); /* generate secret number: */ iSecret = rand() % 10 + 1; do { printf ("Guess the number (1 to 10): "); scanf ("%d",&iGuess); if (iSecret iGuess) puts ("The secret number is higher"); } while (iSecret!=iGuess); puts ("Congratulations!"); return 0;}
Output
Guess the number (1 to 10): 5
The secret number is higher
Guess the number (1 to 10): 8
The secret number is lower
Guess the number (1 to 10): 7
Congratulations!
In this example, the random seed is initialized to a value representing the second in which the program is executed (time is defined in the header <ctime>). This way to initialize the seed is generally a good enough option for most randoming needs.