51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 6913|回复: 12
打印 上一主题 下一主题

[原创] Randomize函数的用法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-8-28 12:53:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
Rnd用来生成随机数,Randomize用来初始化Rnd函数的随机数生成器,赋给它新种子。
我用起来的时候有点晕:
rnd [(number)] number 为负数时使用number为种子生成随机数
是不是这样理解的:

  1. Randomize 10
  2. rnd
复制代码

Randomize 将10赋给rnd作为种子生成随机序列

Randomize的作用范围是第一次调用Rnd函数之前么?
我在一个for循环里面使用了它:

  1. For  j=0 to 5
  2.         Randomize 10
  3.         msgbox rnd
  4. Next
复制代码

结果是生成了如下数列:
0.5749933
0.4921337
0.2718709
0.6670802
0.4814524
0.3039149

而这样使用的话:

  1. For  j=0 to 5
  2.         rnd -1
  3.         Randomize 10
  4.         msgbox rnd
  5. Next
复制代码

结果是:
重复序列0.1436949


帮助文档里面Randomize有这么一句话:
使用相同的 number 值的 Randomize 不能重复先前的随机数序列。
就是说,使用相同的Randomize [number]去初始化Rnd函数,但得不到相同的序列

但RND函数里面说的是,所以对于任何最初给定的种子都会生成相同的数列。
就上面这句话的理解,
我以为的rnd函数应该是这样的:
rnd1=funtion(number)
rnd2=funtion(rnd1)
...

上面说的有点乱了.
我的问题应该是这样的:
Randomize number
是把number作为Rnd函数的种子么?
Randomize函数在rnd函数已经被调用之后使用,如:
Dim i
i=rnd;
Randomize number '(或者不带参数)
这个时候,Randomize还起作用么?如果起作用的话,是把number赋给rnd函数作为种子去生成下一个随机数么?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

13#
发表于 2007-8-29 11:13:12 | 只看该作者
原帖由 Banditu 于 2007-8-29 08:48 发表
哈哈,刚刚又试了3组测试,结果如下:
Dim i
Randomize 10
For i = 1 to 5
        msgbox rnd
Next
0.5749933
0.2375866
0.5295308
0.2520258
0.9770579
========================
Dim i
For i = 1 to 5 ...

够强,向你致敬,学习了
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2007-8-29 10:57:47 | 只看该作者
也在学习~~
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2007-8-29 08:53:57 | 只看该作者
原帖由 yuandjing 于 2007-8-29 08:45 发表
因为发现随机函数不够随机,所以这样做的目的是为了生成更随机的随机数

我只是想弄明白这2个函数的工作机理到底是什么。如果目的仅仅是生成随机序列的话,调用rnd函数前用无参数randomize去初始化就可以了,因为用的是系统时间参数,总是在变化的,哈哈
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2007-8-29 08:48:33 | 只看该作者
哈哈,刚刚又试了3组测试,结果如下:
Dim i
Randomize 10
For i = 1 to 5
        msgbox rnd
Next
0.5749933
0.2375866
0.5295308
0.2520258
0.9770579
========================
Dim i
For i = 1 to 5
        Randomize 10
        msgbox rnd
Next
0.5749933
0.4921337
0.2718709
0.6670802
0.4814524
=========================
Dim i
  Randomize 10
For i = 1 to 5
        msgbox rnd
Next
Randomize 10
For i = 1 to 5
        msgbox rnd
Next
0.5749933
0.2375866
0.5295308
0.2520258
0.9770579
0.3039149
0.3014932
0.2732968
0.1517703
0.07219708

Dim i
  Randomize 10
For i = 1 to 5
        msgbox rnd
Next
For i = 1 to 5
        Randomize 10
        msgbox rnd
Next
0.5749933
0.2375866
0.5295308
0.2520258
0.9770579
0.3039149
0.5709482
0.7698483
0.4387271
0.4320909

到现在为止,我觉得基本弄清楚这2个函数的作用了:
rnd [number1]函数是随机数生成器,randomize[number2]函数可以初始化rnd函数;
rnd函数的随机序列有2个参数决定:一个是parameter1,一个是parameter2.这2个参数,在首次运行的时候都有一个默认值,但在rnd函数的运行过程中,parameter1的值是变化的,变化的规则由首次运行时number1的值决定(小于0时每次都取number1,其它情况取随机序列中的数),parameter2的值是固定的,由randomize函数给出。如果没有给出,则使用默认值。rnd函数的结果由parameter1,2的值共同决定。所以,每次rnd函数运行时,如果没有使用randomize函数对他进行初始化的话,产生的随机序列是一样的。
欢迎大家去验证,哈哈
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-8-29 08:45:21 | 只看该作者
因为发现随机函数不够随机,所以这样做的目的是为了生成更随机的随机数
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    8#
    发表于 2007-8-28 23:15:23 | 只看该作者
    关于此函数,也可以参考 http://bbs.51testing.com/viewthread.php?tid=29637
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    7#
    发表于 2007-8-28 23:12:50 | 只看该作者
    呵呵!都研究地很深呀,学习了。谢谢各位!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2007-8-28 19:55:43 | 只看该作者
    Randomize 的作用就是初始化随机函数,一般情况下不用带参数就好,它会自动调用SystemTimer做为参数,从而每次循环都生成不同随机数序列。其参数的值可以理解为生成随机数列的编号。
    例如:运行以下代码
    Randomize 10
    For  j=0 to 5
            msgbox rnd
    Next
    结果是生成了如下数列:
    0.5749933
    0.4921337
    0.2718709
    0.6670802
    0.4814524
    0.3039149

    然后将Randomize的参数改为5
    Randomize 5
    For  j=0 to 5
            msgbox rnd
    Next
    得到另一组完全不同的随机数列
    0.2565482
    0.0215489
    0.9685989
    0.6594774
    0.2659847

    但若再把Randomize的参数改回到10,那么又将输出第一次产生的随机数列
    即运行:
    Randomize 10
    For  j=0 to 5
            msgbox rnd
    Next
    得到结果:
    0.5749933
    0.4921337
    0.2718709
    0.6670802
    0.4814524
    0.3039149
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2007-8-28 19:38:29 | 只看该作者
    QTP有自带的随机函数了,何必再去用的那么复杂呢。。。直接用RandomNumber(i,j)不是很好么。。。直接就返回了一个从i到j的随机整数。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
     楼主| 发表于 2007-8-28 18:44:50 | 只看该作者
    原帖由 yuandjing 于 2007-8-28 15:02 发表
    好复杂,楼主研究的比较深入
    我一般调用随机函数用我自己写的这个函数,比较方便
    '随机函数生成
    '输入值:生成值范围 i~j
    '返回值:随机数
    Public Function Get_RandNum(fromNum,toNum)
            If (fromNum

    呵呵,我想问一下,您的函数里面的for循环体,也使用了randomize函数,这是用来干嘛呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2007-8-28 15:10:57 | 只看该作者
    hao  nan  o
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2#
    发表于 2007-8-28 15:02:33 | 只看该作者
    好复杂,楼主研究的比较深入
    我一般调用随机函数用我自己写的这个函数,比较方便
    '随机函数生成
    '输入值:生成值范围 i~j
    '返回值:随机数
    Public Function Get_RandNum(fromNum,toNum)
            If (fromNum<0) Or (toNum<0) Then
                    MsgBox "只接受大于零的输入"
            ElseIf fromNum>toNum then
                    MsgBox "起始值必须小于结束值"
            Else
                    Dim RunTime
                    Randomize   
                    RunTime = Int((10 * Rnd) + 1)
                    Dim MyValue,i
                    For i = 1 To RunTime
                            Randomize  
                            MyValue = Int(((toNum - fromNum + 1) * Rnd) + (fromNum))
                    Next
               Get_randNum=MyValue
              End If
    End Function
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-10-5 21:16 , Processed in 0.106271 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表