33,311
社区成员
发帖
与我相关
我的任务
分享
srand((unsigned)time(NULL));
for (int i = 0; i < 10; ++i)
{
//srand((unsigned)time(NULL));
double pi2 = (double)rand() / (double)(RAND_MAX);
std::cout <<pi2 << std::endl;
int n = 11;
}
//srand((unsigned)time(NULL));
for (int i = 0; i < 10; ++i)
{
srand((unsigned)time(NULL));
double pi2 = (double)rand() / (double)(RAND_MAX);
std::cout <<pi2 << std::endl;
int n = 11;
}
#include <stdio.h>
#include <time.h>
const unsigned long a = 7791 ;
const unsigned long b = 1701 ;
const unsigned long c = 1912 ;
static unsigned long r ;
int m_srand (unsigned long s)
{
r = s ;
return 0 ;
}
unsigned long m_rand ()
{
r = (a * r + b) % c ;
r &= 0x7fff ;
return r ;
}
int main ()
{
int i ;
double d ;
m_srand (time (0)) ;
for (i = 0 ; i < 100 ; i++)
{
d = (double) m_rand () / 0x7fff ;
printf ("%lf\n" ,d) ;
}
return 0 ;
}
因为库函数叶返回的是一个周期较长的周期函数值 ,所以说库函数也是用线性同余式得到伪随机数的 ,但是应该经过某种优化 ,而有较好的随机性吧
由以上代码可看出srand作用域是全局的吧
srand(8);
for (int i = 0; i < 10; ++i)
{
double pi2 = (double)rand() / (double)(RAND_MAX);
std::cout <<pi2 << std::endl;
}
用以上代码,你会发现每次debug输出的数值是一样,这是因为我设置的srand函数的输入都为8,所以每次debug输出值都是一样的序列。
time(NULL)是取当前时间,当你把srand((unsigned)time(NULL));放在for循环中时,由于一个for循环的时间极短,所以所有的time(NULL)的返回值相同,因此rand()的值也就相同。
当你在main函数设置srand((unsigned)time(NULL));时,影响的将是所有的rand,所以,所有子函数rand()都成随机的,你可以这样用。
for (int i = 0; i < 10; ++i)
{
srand((unsigned)i);
double pi2 = (double)rand() / (double)(RAND_MAX);
std::cout <<pi2 << std::endl;
int n = 11;
}
return 0;