关于rand()产生随机数的一个有关问题

关于rand()产生随机数的一个问题
本帖最后由 u013991612 于 2014-04-01 11:44:47 编辑
各位大神,能不能帮忙解释下一直以来的一个疑问,本人正在学C++
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(0));
int a=rand();
int b=rand();
return 0;
}

srand设定的种子是time(0)表示的UNIX时间,按理来说执行int a=rand();和int b=rand();这两个语句时,时间间隔不会超过1秒吧,a、b的值应该一样啊,为什么实际上a和b的值不一样??
求解。。。
------解决方案--------------------
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\rand.c
/***
*rand.c - random number generator
*
*       Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
*       defines rand(), srand() - random number generator
*
*******************************************************************************/

#include <cruntime.h>
#include <mtdll.h>
#include <stddef.h>
#include <stdlib.h>

/***
*void srand(seed) - seed the random number generator
*
*Purpose:
*       Seeds the random number generator with the int given.  Adapted from the
*       BASIC random number generator.
*
*Entry:
*       unsigned seed - seed to seed rand # generator with
*
*Exit:
*       None.
*
*Exceptions:
*
*******************************************************************************/

void __cdecl srand (
        unsigned int seed
        )
{
        _getptd()->_holdrand = (unsigned long)seed;
}


/***
*int rand() - returns a random number
*
*Purpose:
*       returns a pseudo-random number 0 through 32767.
*
*Entry:
*       None.
*
*Exit:
*       Returns a pseudo-random number 0 through 32767.
*
*Exceptions:
*
*******************************************************************************/

int __cdecl rand (
        void
        )
{
        _ptiddata ptd = _getptd();

        return( ((ptd->_holdrand = ptd->_holdrand * 214013L
            + 2531011L) >> 16) & 0x7fff );
}

------解决方案--------------------
srand就是设置种子,如果srand的内容一样,那么后面产生的是一样的.
int rand_t()
{
srand(100);
int a=rand();
srand(100);
int b=rand();
return 0;
}

------解决方案--------------------
个人的一种理解: srand() 是撒下随机数的种子 将收获一个随机数的矩阵,而rand()表示依次从这个矩阵中取出一个数并返回 ,就像种瓜得瓜,种豆得豆一样,如果你给srand()输入的整型参数不同,那么你获取的随机数矩阵也不同   调用rand()返回的值也就不同。
具体到该例子,srand(time(NULL))表示 以 从1970年1月1日0时0分秒到现在所经过的秒数  为种子 ,那么对应也会产生一个随机数矩阵。当连续调用rand()返回的是随机数矩阵的前两个数。楼主可以做如下实验,在一秒内运行该程序两次,会发现第一次运行产生的随机数a.b与第二次产生的随机数 a、b是相同的,而超过1,秒的话情况就不同了