以下是引用TZTJ在2015-10-23 11:50:25的发言:
rand(60)得到是一个什么常数。在你的代码中有rand(班+recno())是一个什么数呢?
rand(60)得到是一个什么常数。在你的代码中有rand(班+recno())是一个什么数呢?
以下是引用taifu945在2015-10-19 16:15:34的发言:
说一下我用随机数的情况哦:一般,程序初始化阶段,来一句“=RAND(-1)”(实际上任何负数都可)。这句的目的是为了让VFP在后面生成随机数时,以系统时间作为种子数。何为种子数?在我理解,目前常用的编程语言里用到的随机数函数生成的都是伪随机数,也就是事先已经有一组组的数字,然后这些数字有个序列号,这个序列号就叫“种子”。比如:你不停地用“?RAND(10)”命令,就只能得到0.21;如果你不停地输入“?RAND()”,就永远只能得到一组相同的数字序列。我这里的VFP9就是:0.85、0.55、0.91、... ...;两者结合着用:先输入“?RAND(10)”,得到0.21,再后面全部用“?RAND()”,就会得到序列号为10那组的一个个“随机”数字。但先用了“=RAND(-1)”,再用“?RAND()”命令,你会发现每次得到的数字就不一样。上面这些实验你可以通过反复运行或退出VFP测试结果,也即,用相同的正数作为种子号,或省略种子号,退出VFP再进入时,得到的“随机”数每次都是一样的;而如果用负数作为种子数,无论每次种子数是否一样,退出VFP再进入时,得到的随机数是不一样的。你可以理解为,用负数作为种子号,实际上是让VFP每次都自动换一个序列号,这样得到的随机数可以相对随机一点。
这里已经说得很详细。说一下我用随机数的情况哦:一般,程序初始化阶段,来一句“=RAND(-1)”(实际上任何负数都可)。这句的目的是为了让VFP在后面生成随机数时,以系统时间作为种子数。何为种子数?在我理解,目前常用的编程语言里用到的随机数函数生成的都是伪随机数,也就是事先已经有一组组的数字,然后这些数字有个序列号,这个序列号就叫“种子”。比如:你不停地用“?RAND(10)”命令,就只能得到0.21;如果你不停地输入“?RAND()”,就永远只能得到一组相同的数字序列。我这里的VFP9就是:0.85、0.55、0.91、... ...;两者结合着用:先输入“?RAND(10)”,得到0.21,再后面全部用“?RAND()”,就会得到序列号为10那组的一个个“随机”数字。但先用了“=RAND(-1)”,再用“?RAND()”命令,你会发现每次得到的数字就不一样。上面这些实验你可以通过反复运行或退出VFP测试结果,也即,用相同的正数作为种子号,或省略种子号,退出VFP再进入时,得到的“随机”数每次都是一样的;而如果用负数作为种子数,无论每次种子数是否一样,退出VFP再进入时,得到的随机数是不一样的。你可以理解为,用负数作为种子号,实际上是让VFP每次都自动换一个序列号,这样得到的随机数可以相对随机一点。
rand(60)的60是一个种子数
这样看看,比较一下种子数不变之后与改变之后的变化
?rand(60)
?rand()
?rand()
?rand(60)
?rand()
?rand()
?rand(61)
?rand()
?rand()
?rand(61)
?rand()
?rand()
rand(班+recno())应该与rand(recno())效果相同,用recno()作为变动的种子,产生一个随机的索引序列。