Pseudo-random sequence generation

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 ) 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 <stdio.h>
#include <stdlib.h>
#include <time.h>

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 . 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 <stdio.h>
#include <stdlib.h>
#include <time.h>

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 lower");
    else 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 ). This way to initialize the seed is generally a good enough option for most randoming needs.

原文链接: https://www.cnblogs.com/zhuyf87/archive/2012/12/12/2813981.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/72308

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午3:20
下一篇 2023年2月9日 下午3:21

相关推荐