回 帖 发 新 帖 刷新版面

主题:[讨论]Rnd函数真的能做到完全的数学理论上的随机吗?---moz进来一下

a = 0: b = 0: c = 0: d = 0: e = 0: f = 0: g = 0: h = 0
For i = 1 To 10000
n = Int(Rnd * 79 + 1)
If n < 10 Then a = a + 1
If n >= 10 And n < 20 Then b = b + 1
If n >= 20 And n < 30 Then c = c + 1
If n >= 30 And n < 40 Then d = d + 1
If n >= 40 And n < 50 Then e = e + 1
If n >= 50 And n < 60 Then f = f + 1
If n >= 60 And n < 70 Then g = g + 1
If n >= 70 And n < 80 Then h = h + 1
Next i
Print a; b; c; d; e; f; g; h

运行这个程序,感觉产生随机数40以上的稍多一点.
要是一个一个地试,感觉更不好了,
不信你们可以运行下面这个程序76次,
n=int(rnd*76+1)
print n
出现50-59次数最多,60-76的次数不少,而0-20的次数真的很少.

回复列表 (共12个回复)

沙发

我去试试

板凳

不能,因为所使用的公式太简单,实际应用会是使用一个数学常数(如Pi)的几万位结果来进行随机或者使用CPU时间,或者使用用户操作的时间来做随机种子
当然,算法也得换

3 楼

[quote]不能,因为所使用的公式太简单,实际应用会是使用一个数学常数(如Pi)的几万位结果来进行随机或者使用CPU时间,或者使用用户操作的时间来做随机种子
当然,算法也得换[/quote]
能举个例子吗?

4 楼

[quote]不能,因为所使用的公式太简单,实际应用会是使用一个数学常数(如Pi)的几万位结果来进行随机或者使用CPU时间,或者使用用户操作的时间来做随机种子
当然,算法也得换[/quote]
Randomize
n=int(rnd*76+1)
print n

是这样吗?

5 楼

当然不是

6 楼

[quote]当然不是[/quote]
??????????

7 楼

你怎么知道它不是数学上的随机呢?
数学上的随机是什么样子的呢?

1. 如果没有预置种子数,得到的序列是固定的,所以最好预置种子序列
2. 也可以使用时间函数,日期函数,或者多种不确定因素组合成想像中的随机数来使用.

8 楼

[quote]你怎么知道它不是数学上的随机呢?
数学上的随机是什么样子的呢?

1. 如果没有预置种子数,得到的序列是固定的,所以最好预置种子序列
2. 也可以使用时间函数,日期函数,或者多种不确定因素组合成想像中的随机数来使用.[/quote]
麻烦你为我举两个例子(上面你所说的两种)
就举从76个同学中,随机抽取一个的例子.
谢谢

9 楼

[quote]你怎么知道它不是数学上的随机呢?
数学上的随机是什么样子的呢?

1. 如果没有预置种子数,得到的序列是固定的,所以最好预置种子序列
2. 也可以使用时间函数,日期函数,或者多种不确定因素组合成想像中的随机数来使用.[/quote]
Randomize 
n=Int(Rnd*76+1)
Print n
是不是这样?

或者把Randomize改成Randomize Timer也可以,是不是这样?

10 楼

习惯上最常用的,是 Randomize timer

我来回复

您尚未登录,请登录后再回复。点此登录或注册