随机函数 种子解决办法
随机函数 种子
我看到一个例子
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
我看到一个例子
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 这样的序列~