为什么生成不了真正的随即数?

时间:2021-08-04 09:54:29
Private Sub Command1_Click()
    Randomize 41
    For i = 1 To 5
        b = Rnd(1)
        Debug.Print b
        MsgBox b
    Next i
End Sub

每次结果都不一样!

10 个解决方案

#1


题目错了!
我的目的是
每次command1 click的时候 都生成
相同的伪随即数。即每次msgbox出来的数列都是一样的
 所以randomize 一个固定值
可事实证明还是乱七八糟的。 烦!

#2


哦,刚看到了,在randomize 41 之前 要加一句 rnd -1
这样每次都是唯一的。 而且不randomize 41 只要先rnd -1也是唯一的
很奇怪,那样要randomize干什么用? 但是有了它又不一样,没有也行,单独使用randomize xx
却不行,参考msdn也没说到实处,很纳闷, 微软搞什么鬼

#3


当你在随机后再次要打乱随机数时就要使用randomize啦

#4


randomize
很有用,否则你每次随机出来的数列都将是一样的
就是说假设第一次是2、5、1、6、7...
那么以后都是2、5、1、6、7...

#5


可不可以不加RANDOMIZE 这样的话每次出来的数都是一样的

#6


"在randomize 41 之前 要加一句 rnd -1"?????!!!
"单独使用randomize xx却不行"?????!!!!
我只听说过如果想要真正的随机数序列就要用randomize去初始化计算机的随机数发生器。。然后再用RND生成随机数。。如果按照你的要求,randomize的确是可有可无。。另外。。。如果只是单独使用randomize而没有RND,那是完全没有意义的。。。好好看看这两个语句的用法吧。。。。。。

#7


用randomize
不过随机化种子取一个变化的量,比如说系统时间之类的吧

#8


由于是个函数, 需要每次进入, 生成了的伪随机数序列都是一样
于是我这样写
randomize 41
for cnt = 1 to 30
    msgbox rnd(1)
next cnt
应该每次进入都是一样的吧, 可是他还是随机的。
我是想让他不随机都难!!
纠正一下:我题目的意思错了: 为什么我rnd想生成固定的伪随机数都难!
我找了很多资料,都是介绍如何生成随机数的, 一般 randomize timer等初始化seek
可我这里要写个函数加密字符串, 我想每次结果都一样。就想randomize 一个固定数
却办不到...

#9


to  回复人: Wit253(阿狼) ( ) 信誉:100  2003-06-02 20:12:00  得分:0 
randomize
很有用,否则你每次随机出来的数列都将是一样的
就是说假设第一次是2、5、1、6、7...
那么以后都是2、5、1、6、7...

我的目的就是想这样, 第一次 是 2,5,1,6,7
第2次,以后还是2,5,1,6,7 
可是不管我怎么用, 就是办不到!

他只是每次运行程序都这样, 可是我在一个函数中,这样写,需要多次调用,却不一样
 
 

#10


根据msdn的解释,
1 如果rnd后面是一个负数, 则用该数做为seek, 生成一个数,实践证明结果也一样
2 rnd 后面如果是一个正数, 则用前续rnd的结果做为seek,生成一个数 (这句很含糊!)
3 rnd 后面如果是0 ,则调用最后一次调用rnd函数的结果,实践证明也一样
4 rnd  后面不跟参数,则同 rnd 后面跟正数
5 randomize xx  用xx初始化seek, 如果省略xx, 则同 randomize timer
我想系统维护了一个内部变量, 记录了当前的seek吧!
但是这个seek有什么用! 因为rnd不过哪个版本都不调用这个seek!
所以 我用上面的函数没作用!(randomize 一个固定数后, 后面的结果还是随机的)
但是你也不能说他完全没作用..如果使用了randomize a 和 randomize b, 他就是不一样

6 其实是目前写ini文件加密模块的时候, 看了http://expert.csdn.net/Expert/topic/1836/1836666.xml?temp=.1967279
这个帖的时候才有这种想法的, 在那里面randomize前面有个rnd -1 ,我当时就很含糊
这个有什么用,按照以前解释, randomize 一个固定值(他那个函数里面是一个参数), 后面的rnd
应该是固定的啊! 那rnd -1 有什么用? 不过看了msdn的解释, rnd -1是一个固定值,后面的rnd以
前续的rnd结果做seek, 这样他就是固定的了, 这样一想,randomize 这个有什么用? 不是没用?
实验的结果证明如果不加randomize也是可以用的,每次都是固定的伪随机数, ,如果只有randomize,而没有rnd -1却不是固定序列伪随机数, 按照这样的解释, randomize就是个没用的东东,不过你说他没用, 但是在那个函数里面,用了没用结果就是不一样, 莫非还要联合使用?????
其实还是对3:rnd( 一个整数 )的计算方式不理解, 它到底是调用前续rnd函数的结果来实现呢? 还是调用randomize后的seek? 恩,好象都有影响. 希望大家讨论下

#1


题目错了!
我的目的是
每次command1 click的时候 都生成
相同的伪随即数。即每次msgbox出来的数列都是一样的
 所以randomize 一个固定值
可事实证明还是乱七八糟的。 烦!

#2


哦,刚看到了,在randomize 41 之前 要加一句 rnd -1
这样每次都是唯一的。 而且不randomize 41 只要先rnd -1也是唯一的
很奇怪,那样要randomize干什么用? 但是有了它又不一样,没有也行,单独使用randomize xx
却不行,参考msdn也没说到实处,很纳闷, 微软搞什么鬼

#3


当你在随机后再次要打乱随机数时就要使用randomize啦

#4


randomize
很有用,否则你每次随机出来的数列都将是一样的
就是说假设第一次是2、5、1、6、7...
那么以后都是2、5、1、6、7...

#5


可不可以不加RANDOMIZE 这样的话每次出来的数都是一样的

#6


"在randomize 41 之前 要加一句 rnd -1"?????!!!
"单独使用randomize xx却不行"?????!!!!
我只听说过如果想要真正的随机数序列就要用randomize去初始化计算机的随机数发生器。。然后再用RND生成随机数。。如果按照你的要求,randomize的确是可有可无。。另外。。。如果只是单独使用randomize而没有RND,那是完全没有意义的。。。好好看看这两个语句的用法吧。。。。。。

#7


用randomize
不过随机化种子取一个变化的量,比如说系统时间之类的吧

#8


由于是个函数, 需要每次进入, 生成了的伪随机数序列都是一样
于是我这样写
randomize 41
for cnt = 1 to 30
    msgbox rnd(1)
next cnt
应该每次进入都是一样的吧, 可是他还是随机的。
我是想让他不随机都难!!
纠正一下:我题目的意思错了: 为什么我rnd想生成固定的伪随机数都难!
我找了很多资料,都是介绍如何生成随机数的, 一般 randomize timer等初始化seek
可我这里要写个函数加密字符串, 我想每次结果都一样。就想randomize 一个固定数
却办不到...

#9


to  回复人: Wit253(阿狼) ( ) 信誉:100  2003-06-02 20:12:00  得分:0 
randomize
很有用,否则你每次随机出来的数列都将是一样的
就是说假设第一次是2、5、1、6、7...
那么以后都是2、5、1、6、7...

我的目的就是想这样, 第一次 是 2,5,1,6,7
第2次,以后还是2,5,1,6,7 
可是不管我怎么用, 就是办不到!

他只是每次运行程序都这样, 可是我在一个函数中,这样写,需要多次调用,却不一样
 
 

#10


根据msdn的解释,
1 如果rnd后面是一个负数, 则用该数做为seek, 生成一个数,实践证明结果也一样
2 rnd 后面如果是一个正数, 则用前续rnd的结果做为seek,生成一个数 (这句很含糊!)
3 rnd 后面如果是0 ,则调用最后一次调用rnd函数的结果,实践证明也一样
4 rnd  后面不跟参数,则同 rnd 后面跟正数
5 randomize xx  用xx初始化seek, 如果省略xx, 则同 randomize timer
我想系统维护了一个内部变量, 记录了当前的seek吧!
但是这个seek有什么用! 因为rnd不过哪个版本都不调用这个seek!
所以 我用上面的函数没作用!(randomize 一个固定数后, 后面的结果还是随机的)
但是你也不能说他完全没作用..如果使用了randomize a 和 randomize b, 他就是不一样

6 其实是目前写ini文件加密模块的时候, 看了http://expert.csdn.net/Expert/topic/1836/1836666.xml?temp=.1967279
这个帖的时候才有这种想法的, 在那里面randomize前面有个rnd -1 ,我当时就很含糊
这个有什么用,按照以前解释, randomize 一个固定值(他那个函数里面是一个参数), 后面的rnd
应该是固定的啊! 那rnd -1 有什么用? 不过看了msdn的解释, rnd -1是一个固定值,后面的rnd以
前续的rnd结果做seek, 这样他就是固定的了, 这样一想,randomize 这个有什么用? 不是没用?
实验的结果证明如果不加randomize也是可以用的,每次都是固定的伪随机数, ,如果只有randomize,而没有rnd -1却不是固定序列伪随机数, 按照这样的解释, randomize就是个没用的东东,不过你说他没用, 但是在那个函数里面,用了没用结果就是不一样, 莫非还要联合使用?????
其实还是对3:rnd( 一个整数 )的计算方式不理解, 它到底是调用前续rnd函数的结果来实现呢? 还是调用randomize后的seek? 恩,好象都有影响. 希望大家讨论下