随机函数相关问题? 200
展开全部
在使用过程中发现每次重新打开工作簿时,执行一次Rnd函数的宏,都会得到一个相同的随机数,后来看了一下“帮助”,在Rnd函数前加入Randomize就可以解决这一问题,但本人还是有点不放心,是不是这样做就会产生一个真正的随机数呢
最好能“剖析”一下Rnd,Randomize工作原理,越详细越好,即详细又准确的会加20分
多谢了,高手们!问题补充:
有如下命令:
Randomize
for a=1 to 6
cells(1,a)=rnd
next a
这是一个产生6个随机数的例子,如果前面没有Randomize时每次打开工作簿会产生同一个6个数的数列,那么加了Randomize(在For语句前)后,那这6个数之间的排列关系(注意:不是指这6个数的数值本身,数值本身应该是变的)是不是还是没变呢?
如果还是没变,那把Randomize加在For语句后cells前,那是不是就会改变呢?
如果还是没变,那有什么办法可以使这6个数完全随机化么?
满意答案
gupiao0000019
LV12
2013-08-29
Randomize Timer 用这个 它会以当前时间作为随机数种子,之后再产生的随机数就确实是真真正正的随机的了。
Rnd 每次执行都会合上一次Rnd的结果有关,也就是说是用上一个Rnd的结果演算过来的,所以
如果不进行初始化,那么一串 rnd 执行多少次 都一样。
只要使用了 Randomize timer之后 就相当于从一个时间点初始化了Rnd一下,那一串rnd 就不会再每次都一样了 ,因为 timer 函数 每次的时间都不一样
最好能“剖析”一下Rnd,Randomize工作原理,越详细越好,即详细又准确的会加20分
多谢了,高手们!问题补充:
有如下命令:
Randomize
for a=1 to 6
cells(1,a)=rnd
next a
这是一个产生6个随机数的例子,如果前面没有Randomize时每次打开工作簿会产生同一个6个数的数列,那么加了Randomize(在For语句前)后,那这6个数之间的排列关系(注意:不是指这6个数的数值本身,数值本身应该是变的)是不是还是没变呢?
如果还是没变,那把Randomize加在For语句后cells前,那是不是就会改变呢?
如果还是没变,那有什么办法可以使这6个数完全随机化么?
满意答案
gupiao0000019
LV12
2013-08-29
Randomize Timer 用这个 它会以当前时间作为随机数种子,之后再产生的随机数就确实是真真正正的随机的了。
Rnd 每次执行都会合上一次Rnd的结果有关,也就是说是用上一个Rnd的结果演算过来的,所以
如果不进行初始化,那么一串 rnd 执行多少次 都一样。
只要使用了 Randomize timer之后 就相当于从一个时间点初始化了Rnd一下,那一串rnd 就不会再每次都一样了 ,因为 timer 函数 每次的时间都不一样
展开全部
随机数字
(1)生成随机数比较简单,=RAND()即可生成0-RAND_MAX之间的随机数;(#define RAND_MAX 0x7fffu)
(2)如果要是整数,就用=INT(RAND()*10,表示0至9的整数,以此类推;
(3)如果要生成a与b之间的随机实数,就用=RAND()*(b-a+1)+a,就能产生固定位数的整数了,以此类推;
注意:如果要使用函数RAND()生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=RAND()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。不过,这样只能一个一个的永久性更改,如果数字比较多,也可以全部选择之后,另外选择一个合适的位置粘贴,粘贴的方法是点击右键,选择“选择性粘贴”,然后选择“数值”,即可将之前复制的随机数公式产生的数值(而不是公式)复制下来。
(1)生成随机数比较简单,=RAND()即可生成0-RAND_MAX之间的随机数;(#define RAND_MAX 0x7fffu)
(2)如果要是整数,就用=INT(RAND()*10,表示0至9的整数,以此类推;
(3)如果要生成a与b之间的随机实数,就用=RAND()*(b-a+1)+a,就能产生固定位数的整数了,以此类推;
注意:如果要使用函数RAND()生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=RAND()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。不过,这样只能一个一个的永久性更改,如果数字比较多,也可以全部选择之后,另外选择一个合适的位置粘贴,粘贴的方法是点击右键,选择“选择性粘贴”,然后选择“数值”,即可将之前复制的随机数公式产生的数值(而不是公式)复制下来。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
rand()函数的返回值就是求取随机的值,所以如果没有对数据有要求,直接这样写:
printf("%d", rand());//输出一个随机数.
但如果对数有要求,如小数或在一定值以内:
小数:rand()/100.0 //100.0后面的.0必须写,得到一个小数点后有两位小数的小数。
一定范围内的数:rand()%m+n //m是数据区间差,n是最小值
如:求[ 100,120)之间的数就是:rand()%20+100
rand()函数得到的是一伪随机序列,即,每次运行时,得到的随机序列是相同的(这是为了保证调试程序时,每次保持相对稳定的数据,便于查找程序问题)。为了得到不同的随机序列,系统提供了srand(int n)函数设置随机种子,n值不同时,就会得到不同的随机序列,常用方法为:
srand(time(NULL)); //time的返回值是当前系统时间(秒数),因为每次运行时的时间不同,time的结果就会是不同的值,这样,srand()设置的种子就会不同,得到的随机序列也就会不同。
time在<time.h>中声明
rand,srand在<stdilb.h>中声明
printf("%d", rand());//输出一个随机数.
但如果对数有要求,如小数或在一定值以内:
小数:rand()/100.0 //100.0后面的.0必须写,得到一个小数点后有两位小数的小数。
一定范围内的数:rand()%m+n //m是数据区间差,n是最小值
如:求[ 100,120)之间的数就是:rand()%20+100
rand()函数得到的是一伪随机序列,即,每次运行时,得到的随机序列是相同的(这是为了保证调试程序时,每次保持相对稳定的数据,便于查找程序问题)。为了得到不同的随机序列,系统提供了srand(int n)函数设置随机种子,n值不同时,就会得到不同的随机序列,常用方法为:
srand(time(NULL)); //time的返回值是当前系统时间(秒数),因为每次运行时的时间不同,time的结果就会是不同的值,这样,srand()设置的种子就会不同,得到的随机序列也就会不同。
time在<time.h>中声明
rand,srand在<stdilb.h>中声明
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询