随机函数相关问题?

随机函数相关问题?,第1张

在使用过程中发现每次重新打开工作簿时,执行一次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 函数 每次的时间都不一样

dim aa as int

randomize

aa=fix(rnd100)+1

因为rnd在0到1之间但他不包括1所以>>>>>>>>>>>

好的程序来了,自己写的,已经验证OK!!!

Private Sub Command1_Click()

Randomize

MsgBox Int((100 - 10 + 1) Rnd + 10)

End Sub

这是一个随机产生10到100之间的随机数的程序,也就是只能产生2位数的!

如果你想产生一个数到另一个数之间的随机数,可以这样做:

Int((upperbound - lowerbound + 1) Rnd + lowerbound)

这里,upperbound 是随机数范围的上限,而 lowerbound 则是随机数范围的下限。

rnd()是VB60中随机产生0-1之间浮点数的函数,若要在第一个文本框(text1)中产生(0,1)之间的随机数,则用

text1text=rnd

若在文本框2(text2)中产生(0,10)之间的随机实数,则

text2text=rnd10

若在文本框3(text3)中产生[10,100]的随机整数,则

text3text=int(rnd(100-10+1))+10

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12184504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存