Visual FoxPro 3.0中自编随机数函数
为得到随机数,首先要有一个快速变化的数据源,笔者想到了Windows 95的API函数TimeGetTime,此函数返回Windows 95启动开始已逝去的毫秒数,其值以毫秒级发生变化,这个条件显然是满足的;其次,要求随机数的每一位数的变化都要很快,至少是前几位数的变化要快,但用TimeGetTime得到的随机数正好相反(最后一位以毫秒级变化,前几位却几秒甚至几十秒才变化一次),于是笔者以使用Visual FoxPro 3.0的STR()和LEFT()函数将TimeGetTime的返回值调个头,如此一来便可以满足随机数的要求了。
程序设计中使用FoxTools.FLL库中的RegFn()函数和CallFn()函数来调用TimeGetTime函数。下面的一段程序可产生100个1到100之间的随机数:
Set Talk Off
For I=1 To 100
?Int(Rnd()*100)+1
EndFor
Function RND
Set Decimals To 8
Set Library To C:\VFP\FOXTOOLS.FLL
SysTime=Regfn("TimeGetTime","","I","MMSYSTEM")
Ss=Callfn(SysTime)
RndS=Val("0."+Right(Str(Abs(Ss)),1)+
Left(Right(Str(Abs(Ss)),2),1)+
Left(Right(Str(Abs(Ss)),3),1)+
Left(Right(Str(Abs(Ss)),4),1)+
Left(Right(Str(Abs(Ss)),5),1))
Return(Rnds)
以上程序在Windows 95和Visual FoxPro 3.0中运行通过。