time()和rand()两个函数,各有一个小疑问
答案:4 悬赏:0
解决时间 2021-01-24 06:36
- 提问者网友:难遇难求
- 2021-01-23 20:00
time()和rand()两个函数,各有一个小疑问
最佳答案
- 二级知识专家网友:鸽屿
- 2021-01-23 20:51
time得到系统时钟的1970年1月1日以来的秒数。
如果temp1与temp2在0.3秒内跨秒,则temp2=temp1+1, 如果不跨秒,则相等。
所以是哪种情形,主要取决于运行的时机。
rand得到0到MAX_RAND间的伪随机数,不是得到seed到MAX_RAND间的伪随机数。
srand是为了得到不同系列的伪随机数而采取的随机数发生器初始化工具。
一般用机器时间来初始化它。 如srand( (unsigned)time( NULL ) );
也可以用srand((unsigned)GetTickCount( ));
如果temp1与temp2在0.3秒内跨秒,则temp2=temp1+1, 如果不跨秒,则相等。
所以是哪种情形,主要取决于运行的时机。
rand得到0到MAX_RAND间的伪随机数,不是得到seed到MAX_RAND间的伪随机数。
srand是为了得到不同系列的伪随机数而采取的随机数发生器初始化工具。
一般用机器时间来初始化它。 如srand( (unsigned)time( NULL ) );
也可以用srand((unsigned)GetTickCount( ));
全部回答
- 1楼网友:忘川信使
- 2021-01-24 00:28
就是这么规定的 有什么号疑问的。。。。。
- 2楼网友:傲气稳了全场
- 2021-01-23 22:51
第一问没有明白意思。答第二问如下:
srand(seed);是为随机发生器置一个初始状态,目的是避免产生“规律雷同”的序列,与rand获得值的大小无关。无论seed取什么值,抑或没有srand(seed);这一句,i=rand();的值都在0~32767之间,也不是一个固定的四位数数。追问time(NULL)表示某一时间点距程序调用该语句时的时间间隔,以秒为单位;
srand(seed)中的seed,若为常量时,rand()产生seed~32767之间的随机数。
所以,你说的不清楚。追答不是我说得不清楚,而是你说的是错误的。time(NULL)取得系统当前时间,而不是什么时间间隔。srand(seed)中的seed是一个无符号数,srand用这个数预置伪随机数发生器的初始状态,无论seed是什么数值,也无论有没有srand(seed)这一句,rand()都产生0~32767之间的伪随机数,而不会是seed~32767之间的随机数,也不是固定4位数。
srand(seed);是为随机发生器置一个初始状态,目的是避免产生“规律雷同”的序列,与rand获得值的大小无关。无论seed取什么值,抑或没有srand(seed);这一句,i=rand();的值都在0~32767之间,也不是一个固定的四位数数。追问time(NULL)表示某一时间点距程序调用该语句时的时间间隔,以秒为单位;
srand(seed)中的seed,若为常量时,rand()产生seed~32767之间的随机数。
所以,你说的不清楚。追答不是我说得不清楚,而是你说的是错误的。time(NULL)取得系统当前时间,而不是什么时间间隔。srand(seed)中的seed是一个无符号数,srand用这个数预置伪随机数发生器的初始状态,无论seed是什么数值,也无论有没有srand(seed)这一句,rand()都产生0~32767之间的伪随机数,而不会是seed~32767之间的随机数,也不是固定4位数。
- 3楼网友:渊鱼
- 2021-01-23 21:25
while(i<1000000){... } 的运算速度不是固定的,在多任务同时运行的计算机系统中,由于共享CPU, 消耗的时间可能少于1秒,也可能多于1秒。你的temp1,temp2 取的是整数,temp2-temp1 未必等于1。
你可以改用毫秒计时。clock () 函数 用 毫秒。不要用 time().
--------------
srand 函数原形是 void srand (unsigned int seed);
种子,unsigned int 最大可以是 0xffffffff, 等于 4294967295
32765 是个不怎么大的数。
RAND_MAX 是最大 的 随机数,它的值 由编译器决定。
(如果你的 MAX_RAND=32767,那么你用的是淘汰了的 TC 编译器。)
种子变化,rand() 产生的序列变化,第一个 rand() 在 0-最大之间选取,很难碰到 0 和最大。追问第一个题,程序运行结束之后,显示用时0.3几秒,没超过1s。追答time_t 是整型。 temp1, temp2 是整型。精度1秒。
(整型数+浮点数)你转换成 整型,可以自己处理,例如取地板值,取天花板值,或+0.5 做4舍5入。
如果不加处理,那么程序有默认方法处理。通常默认就是简单的去尾。
int i=0; // 这句声明和初始化每次运行时间略有变化
while(i<1000000){... } // 这句语句每次运行时间略有变化
temp2=time(NULL); // 这句语句每次运行时间略有变化
当这3个时间加起来小于1秒时,temp2等于temp1
当这3个时间加起来大于等于1秒,小于2秒时,temp2等于temp1+1
另外考虑 time_t精度1秒。 跨秒时时间增1。temp2-temp1 精度为 0到2秒。
你可以改用毫秒计时。clock () 函数 用 毫秒。不要用 time().
--------------
srand 函数原形是 void srand (unsigned int seed);
种子,unsigned int 最大可以是 0xffffffff, 等于 4294967295
32765 是个不怎么大的数。
RAND_MAX 是最大 的 随机数,它的值 由编译器决定。
(如果你的 MAX_RAND=32767,那么你用的是淘汰了的 TC 编译器。)
种子变化,rand() 产生的序列变化,第一个 rand() 在 0-最大之间选取,很难碰到 0 和最大。追问第一个题,程序运行结束之后,显示用时0.3几秒,没超过1s。追答time_t 是整型。 temp1, temp2 是整型。精度1秒。
(整型数+浮点数)你转换成 整型,可以自己处理,例如取地板值,取天花板值,或+0.5 做4舍5入。
如果不加处理,那么程序有默认方法处理。通常默认就是简单的去尾。
int i=0; // 这句声明和初始化每次运行时间略有变化
while(i<1000000){... } // 这句语句每次运行时间略有变化
temp2=time(NULL); // 这句语句每次运行时间略有变化
当这3个时间加起来小于1秒时,temp2等于temp1
当这3个时间加起来大于等于1秒,小于2秒时,temp2等于temp1+1
另外考虑 time_t精度1秒。 跨秒时时间增1。temp2-temp1 精度为 0到2秒。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯