【VB】关于randomize随机数
答案:3 悬赏:0 手机版
解决时间 2021-01-10 00:53
- 提问者网友:相思似海深
- 2021-01-09 15:03
【VB】关于randomize随机数
最佳答案
- 五星知识达人网友:春色三分
- 2021-01-09 16:33
这是一个较复杂的数学问题:我记得看到过相关介绍,具体不记得是哪里了。
你可以搜一搜关键字为“产生随机数的算法”的相关内容。大致原理如下:
在计算机程序设计语言中,都有定义了产生随机数的函数,程序员只要调用该函数,就可以产生随机数。数学中,函数需要有一个(或多个)自变量,那么产生随机数的函数,也需要一个自变量。
下面解释VB的Rnd函数与Randomize函数的作用与关系:
Rnd函数需要一个自变量(也叫做产生随机数的种子),来产生一个随机数。但是,我们在使用Rnd函数的时候,并没有给过它什么种子数?这就与Randomize函数有关了:
1,当使用Rnd函数之前,如果没有使用Randomize函数,那么,系统就以某一个固定的数值作为Rnd函数的种子,从而产生第1个随机数,接下来第2次呢,就以第1次产生的随机数作为种子,来产生第2个随机数,第3次呢,就以第2次产生的随机数作为种子,来产生第3个随机数,....。一直按这个样方法产生一系列随机数,所以,在不使用Randomize函数的情况下,每次使用Rnd函数产生的随机数序列是相同的。
2,当使用Rnd函数之前,如果使用了Randomize函数,那么Randomize函数会产生一个随机数,然后,当第1次使用Rnd函数产生随机数的时候,系统会把由Randomize函数产生的随机数给Rnd函数作为第1次的种子。
3,Randomize函数的使用格式:
Randomize [参数]
其中参数,是一个数字,用来作为Randomize函数产生随机数的种子。如果,每次用相同的参数,作为Randomize的种子,那么,结果还是一样,得到的序列是相同的。
例如:
Randomize 1
for i = 1 to 100
print Rnd
next i
但是,Randomize函数的格式中,参数是可选的,当不带参数的时候,系统会将计算机的时钟(具体不知道使用时钟的什么数据)作为Randomize函数的种子,这样以来,有于计算机时钟是在变化的,特别是它的变化周期比较长,这样,就可以产生不同序列的随机数了。
例如:
Randomize
for i = 1 to 100
print Rnd
next i
大概的原理就是这样,有不当之处请指正。
记得以前学C语言还是数据结构的书上,专门介绍如何编写产生随机数的函数。追问这个,好吧,差不多懂了些吧。1.randomize用来获得产生随机数的种子,不加会产生每次都一样的随机序列。randomize【参数】什么都不加时,默认为时钟的什么参数,产生不同的随机序列。
那么,请问!问题中int(6 * rnd +1)是怎么知道区间是1 系统规定了:Rnd函数产生的是[0,1)范围的随机数,用数学表示就是:
0<= Rnd <1
这个容易理解对吧?
接下来,就是数学的等式(不等式)的变换而已了;
容易得到:
0*6<= Rnd*6 <1*6
就是等式(不等式)两边乘以一个大于0的实数,等式(不等式)仍然成立,对吗?
所以有:
0<= Rnd*6 <6
继续对等式(不等式)两边加1,得到
1<= Rnd*6+1 <7
继续使用VB的函数 Int,得到:
1<=int(Rnd*6+1) <7
所以:int(Rnd*6+1)是[1,6]之间的正整数
VB的int(x)函数,是返回不超过X的最大整数。追问看了这个不等式就明白了。0<=rnd<1。随机范围是那些了。那楼下给的这个Int((upperbound - lowerbound + 1) * Rnd + lowerbound) 是干什么用的追答这个是根据,我回答的第2个问题的原理,用数学的方法推导出来的一般公式,就是当你需要产生的随机数的范围在
[Lowerbound,Upperbound]的范围时,使用的公式
其中
Lowerbound 是范围的下边界
Upperbound 是范围的上边界
例如:
要产生[10,100]范围的随机数,那么Lowerbound = 10,Upperbound =100
你可以搜一搜关键字为“产生随机数的算法”的相关内容。大致原理如下:
在计算机程序设计语言中,都有定义了产生随机数的函数,程序员只要调用该函数,就可以产生随机数。数学中,函数需要有一个(或多个)自变量,那么产生随机数的函数,也需要一个自变量。
下面解释VB的Rnd函数与Randomize函数的作用与关系:
Rnd函数需要一个自变量(也叫做产生随机数的种子),来产生一个随机数。但是,我们在使用Rnd函数的时候,并没有给过它什么种子数?这就与Randomize函数有关了:
1,当使用Rnd函数之前,如果没有使用Randomize函数,那么,系统就以某一个固定的数值作为Rnd函数的种子,从而产生第1个随机数,接下来第2次呢,就以第1次产生的随机数作为种子,来产生第2个随机数,第3次呢,就以第2次产生的随机数作为种子,来产生第3个随机数,....。一直按这个样方法产生一系列随机数,所以,在不使用Randomize函数的情况下,每次使用Rnd函数产生的随机数序列是相同的。
2,当使用Rnd函数之前,如果使用了Randomize函数,那么Randomize函数会产生一个随机数,然后,当第1次使用Rnd函数产生随机数的时候,系统会把由Randomize函数产生的随机数给Rnd函数作为第1次的种子。
3,Randomize函数的使用格式:
Randomize [参数]
其中参数,是一个数字,用来作为Randomize函数产生随机数的种子。如果,每次用相同的参数,作为Randomize的种子,那么,结果还是一样,得到的序列是相同的。
例如:
Randomize 1
for i = 1 to 100
print Rnd
next i
但是,Randomize函数的格式中,参数是可选的,当不带参数的时候,系统会将计算机的时钟(具体不知道使用时钟的什么数据)作为Randomize函数的种子,这样以来,有于计算机时钟是在变化的,特别是它的变化周期比较长,这样,就可以产生不同序列的随机数了。
例如:
Randomize
for i = 1 to 100
print Rnd
next i
大概的原理就是这样,有不当之处请指正。
记得以前学C语言还是数据结构的书上,专门介绍如何编写产生随机数的函数。追问这个,好吧,差不多懂了些吧。1.randomize用来获得产生随机数的种子,不加会产生每次都一样的随机序列。randomize【参数】什么都不加时,默认为时钟的什么参数,产生不同的随机序列。
那么,请问!问题中int(6 * rnd +1)是怎么知道区间是1
0<= Rnd <1
这个容易理解对吧?
接下来,就是数学的等式(不等式)的变换而已了;
容易得到:
0*6<= Rnd*6 <1*6
就是等式(不等式)两边乘以一个大于0的实数,等式(不等式)仍然成立,对吗?
所以有:
0<= Rnd*6 <6
继续对等式(不等式)两边加1,得到
1<= Rnd*6+1 <7
继续使用VB的函数 Int,得到:
1<=int(Rnd*6+1) <7
所以:int(Rnd*6+1)是[1,6]之间的正整数
VB的int(x)函数,是返回不超过X的最大整数。追问看了这个不等式就明白了。0<=rnd<1。随机范围是那些了。那楼下给的这个Int((upperbound - lowerbound + 1) * Rnd + lowerbound) 是干什么用的追答这个是根据,我回答的第2个问题的原理,用数学的方法推导出来的一般公式,就是当你需要产生的随机数的范围在
[Lowerbound,Upperbound]的范围时,使用的公式
其中
Lowerbound 是范围的下边界
Upperbound 是范围的上边界
例如:
要产生[10,100]范围的随机数,那么Lowerbound = 10,Upperbound =100
全部回答
- 1楼网友:一袍清酒付
- 2021-01-09 19:16
6 * Rnd+1和1+6 * Rnd结果应该相同
Randomize初始化,如果不加,不会产生随机数,只会产生按顺序产生固定的数值
你说一直输出6,应该是没有Randomize的原因追问randomize不加试了一下,还是产生的随机数(没有规律的数字),他的作用好像不是这个。追答randomize不加,你生成几个随机数。然后把程序关了,重新运行,再生成几个随机数,和上次那几个应该一样。记得多年前我试过
顺便说下上面: rnd产生大于0小于1的数(小数)。6 *rnd自然是生成大于0小于6之间的数(包括小数)。6 *rnd+1,生成大于1小于7的数
6 * Rnd+1和1+6 * Rnd结果不同,估计是你把1放到括号其他地方了追问主要关注楼上几个回答了。没有仔细看看楼下的回答,抱歉了。。。= =
Randomize初始化,如果不加,不会产生随机数,只会产生按顺序产生固定的数值
你说一直输出6,应该是没有Randomize的原因追问randomize不加试了一下,还是产生的随机数(没有规律的数字),他的作用好像不是这个。追答randomize不加,你生成几个随机数。然后把程序关了,重新运行,再生成几个随机数,和上次那几个应该一样。记得多年前我试过
顺便说下上面: rnd产生大于0小于1的数(小数)。6 *rnd自然是生成大于0小于6之间的数(包括小数)。6 *rnd+1,生成大于1小于7的数
6 * Rnd+1和1+6 * Rnd结果不同,估计是你把1放到括号其他地方了追问主要关注楼上几个回答了。没有仔细看看楼下的回答,抱歉了。。。= =
- 2楼网友:街头电车
- 2021-01-09 17:44
童鞋,数学四则运算,先乘后加,因此不是rnd加1 而是 6*Rnd然后再加1。
再说一个Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
作用:生成lowerbound到upperbound的随机数。
对号入座:
Int(6 * Rnd+ 1) 实际等于Int((6-1+1) * Rnd+ 1)
剩下的你自己再想想。
有问题再追问。追问哦,那么...我如果int(6 *rnd)不加1也会产生随机数,那此时的随机数是那个区间的呢?追答看来你没想明白。。。还是看上面
对号入座:
int(6 *rnd)等于Int((5-0+1) * Rnd+ 0)
你说此时随机数是那个区间追问答案是0-5. Int((5-0+1) * Rnd+ 0) 为什么会是5-0+1而不是6-0+0...这个+1是默认的吗?追答看这个,相当于数学里面的一个固定公式
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
然后,看你这里int(6 *rnd),对照一下,lowerbound等于多少?等于0是吧?
好, Int((upperbound - 0 + 1) * Rnd + 0) 再和int(6 *rnd)对照下, 差哪些?
6=upperbound - 0 + 1 这个一元一次方程会解吗?(忘了是不是叫一元一次方程了。。。)追问公式哦、这样就明白了.....那么随机数范围呢:Int(6 * Rnd+ 1)是1 你第二个问题我只能无语追问好吧,那Int((upperbound - lowerbound + 1) * Rnd + lowerbound)这个公式求出来的式子做什么用的,哪里能用到,求教追答你看我前面说的,第二第三行。
再说一个Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
作用:生成lowerbound到upperbound的随机数。
对号入座:
Int(6 * Rnd+ 1) 实际等于Int((6-1+1) * Rnd+ 1)
剩下的你自己再想想。
有问题再追问。追问哦,那么...我如果int(6 *rnd)不加1也会产生随机数,那此时的随机数是那个区间的呢?追答看来你没想明白。。。还是看上面
对号入座:
int(6 *rnd)等于Int((5-0+1) * Rnd+ 0)
你说此时随机数是那个区间追问答案是0-5. Int((5-0+1) * Rnd+ 0) 为什么会是5-0+1而不是6-0+0...这个+1是默认的吗?追答看这个,相当于数学里面的一个固定公式
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
然后,看你这里int(6 *rnd),对照一下,lowerbound等于多少?等于0是吧?
好, Int((upperbound - 0 + 1) * Rnd + 0) 再和int(6 *rnd)对照下, 差哪些?
6=upperbound - 0 + 1 这个一元一次方程会解吗?(忘了是不是叫一元一次方程了。。。)追问公式哦、这样就明白了.....那么随机数范围呢:Int(6 * Rnd+ 1)是1
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯