Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4872|回复: 13

[已解决]Randomize真的是在按时间的返回值来初始化吗?

[复制链接]
发表于 2010-11-28 14:19 | 显示全部楼层 |阅读模式

高难度问题,请比较下面两个代码调用随机数的不同

代码1

 Function SJS() As String
Application.Volatile
Randomize
Dim i, j As Integer
Dim iFlag As Boolean
SJS = Int(Rnd() * 10)
For i = 1 To 5
iFlag = True
Do While iFlag
j = Int(Rnd() * 10)
If InStr(SJS, j) = 0 Then iFlag = False
Loop
SJS = SJS & j
Next i
End Function

代码2 

Function SJS() As String
    Dim StrA$, iPos%, Temp$, Count%
    StrA = "0123456789"
    Count = 10
    Randomize
    For i = 1 To 6
        iPos% = Int(Rnd() * Count% + 1)
        Temp$ = Mid$(StrA$, iPos%, 1)
        SJS$ = SJS$ & Temp$
        Mid$(StrA$, iPos%, 1) = Mid$(StrA$, Count%, 1)
        Mid$(StrA$, Count%, 1) = Temp$
        Count% = Count% - 1
    Next i
    Application.Volatile
End Function

谁的随机性强

[此贴子已经被作者于2010-12-1 17:16:17编辑过]
最佳答案
2010-12-2 16:10

Timer是Excel VBA的一个内部计时器,代表从午夜开始到现在经过的秒数。

Rnd函数的机理是这样的,通过一个种子,也就是一个数,经过一系列计算生成一个数,然后再用这个数经过同样计算生成下一个数。这一系列的数看上去是没有规律的,其实都是经过相同运算,所以是伪随机数。

Randomize可以初始化新的种子,所以Rnd函数得到的结果也会不同。

我不知道你要生成这些数做什么用处,一般来说数据量不大的话这个Rnd已经够用了。

如果要进一步讨论随机性哪个强,或者要生成真随机数,建议去专业编程网站寻找答案。

发表于 2010-11-29 12:13 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2010-12-1 12:21 | 显示全部楼层

Randomize真的是在按时间的返回值来初始化吗?

回到excel 在一列中单元格内用=sjs下拉,,代码1在使用过程中发现惊人的重复 发现这一列中每个单元格内的数据出现惊人的重复,(几十万次到百万级别).具体次数没有记录下来,反正时间不长)     它使用了Randomize语句 按照道理是不应该的,

问题出在哪里?

Randomize语句真的是在按时间来初始化吗? 如果真的是在按时间初始化,怎么次数并不是很多的情况下,就出现了规律性的重复?

代码2还没有测试


excel  RND() 调用的随机数(伪随机数) 究竟是个什么数量级的随机数 ,它的规律? 达到一个什么样的数量级别后,它开始重复

这里有篇文章供参考  http://wenku.baidu.com/view/31c3a16648d7c1c708a145a2.html

另外

andomize
是初始化随机函数。要加一个不定的参数进去。一般都是加个时间。
randomize(now)

如果不加那么,每次开始rnd 产生的随机数顺序是一样的。也就是每次运行随机数都是一样的。

andomize
是初始化随机函数。要加一个不定的参数进去。一般都是加个时间。
randomize(now)

如果不加那么,每次开始rnd 产生的随机数顺序是一样的。也就是每次运行随机数都是一样的。

加不加这个now 有区别吗?

[此贴子已经被作者于2010-12-1 19:28:49编辑过]
回复

使用道具 举报

发表于 2010-12-2 08:35 | 显示全部楼层

没有RND的源代码,很难说。

RND产生的是伪随机数,在很长的测试周期,应该是有规律的。

回复

使用道具 举报

 楼主| 发表于 2010-12-2 15:57 | 显示全部楼层

Randomize真的是在按时间的返回值来初始化吗?

那个代码和您给的代码有什么不同 ?      Randomize初始化是指excel关闭重启时初始化,,还是指开启时,每刷新一次就初始化一次?  还有 Randomize 用 Timer 函数的返回值作为新的随机数种子值,这个timer函数返回值是什么意思 ?
回复

使用道具 举报

发表于 2010-12-2 16:10 | 显示全部楼层    本楼为最佳答案   

Timer是Excel VBA的一个内部计时器,代表从午夜开始到现在经过的秒数。

Rnd函数的机理是这样的,通过一个种子,也就是一个数,经过一系列计算生成一个数,然后再用这个数经过同样计算生成下一个数。这一系列的数看上去是没有规律的,其实都是经过相同运算,所以是伪随机数。

Randomize可以初始化新的种子,所以Rnd函数得到的结果也会不同。

我不知道你要生成这些数做什么用处,一般来说数据量不大的话这个Rnd已经够用了。

如果要进一步讨论随机性哪个强,或者要生成真随机数,建议去专业编程网站寻找答案。

评分

参与人数 1 +18 收起 理由
xdwy81129 + 18 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2010-12-2 18:34 | 显示全部楼层

Randomize可以初始化新的种子 是指excel关闭重启时 初始化新的种子,还是excel打开后每重新计算(F9键) 一次时,初始化种子  

另外timer函数的返回值是什么意思 ,返回值的意思 

Randomize 和  Randomize(now)有区别吗

[此贴子已经被作者于2010-12-2 18:37:44编辑过]
回复

使用道具 举报

发表于 2010-12-2 18:51 | 显示全部楼层

(F1)帮助说:Timer 函数返回一个 Single,代表从午夜开始到现在经过的秒数。

即一个单精度数值。

 

[em11]
回复

使用道具 举报

 楼主| 发表于 2010-12-4 19:29 | 显示全部楼层

randomize ,randomize timer 和 randomize (now) ,randomizer () 有区别吗?

可以推荐一个吗
回复

使用道具 举报

 楼主| 发表于 2010-12-4 19:31 | 显示全部楼层

randomize ,randomize timer 和 randomize (now) ,randomizer () 有区别吗?

QUOTE:
以下是引用amulee在2010-12-2 16:10:00的发言:

Timer是Excel VBA的一个内部计时器,代表从午夜开始到现在经过的秒数。

Rnd函数的机理是这样的,通过一个种子,也就是一个数,经过一系列计算生成一个数,然后再用这个数经过同样计算生成下一个数。这一系列的数看上去是没有规律的,其实都是经过相同运算,所以是伪随机数。

Randomize可以初始化新的种子,所以Rnd函数得到的结果也会不同。

我不知道你要生成这些数做什么用处,一般来说数据量不大的话这个Rnd已经够用了。

如果要进一步讨论随机性哪个强,或者要生成真随机数,建议去专业编程网站寻找答案。

可以推荐一个吗?

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-16 20:34 , Processed in 0.304066 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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