首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

随机函数 种子解决办法

2012-09-08 
随机函数 种子我看到一个例子srand((unsigned) time(NULL)) /*播种子*/   for(i 0 i MAX i++)   { 

随机函数 种子
我看到一个例子
srand((unsigned) time(NULL)); /*播种子*/   
for(i = 0; i < MAX; i++)   
{
   number[i] = rand() % 100; /*产生100以内的随机整数*/   
printf("%d ", number[i]);   

为什么srand((unsigned) time(NULL));这句没有放入循环体内?这样种子不就只播了一次吗?

[解决办法]
srand((unsigned) time(NULL)); 
播种就需要一次。
如果每次都播,就不是很随机了。
而且time(NULL),这个函数,要需要CPU来处理。

[解决办法]
参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\rand.c

C/C++ code
/****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 );}
[解决办法]
1. rand 生成的是伪随即数,设定随机数种子以后,函数返回的是[0,1]间均匀分布的随机数。


2. 对于不同种子,返回的数值不是均匀分布。 可能会得到如:0.1 , 0.12, 0.9 这样的序列~

热点排行