randomize ,2 is the fastest.
Using the string method to get a random number, since I only require a random number between 48 and 57, I feel safe enough using randomize ,2
Code: Select all
Function rndX (s1 As String) As String
#macro GetNumber
#define range(f,l) Int(Rnd*((l+1)-(f))+(f))
s[0]=range(48,s1[0])
For n As Long = 1 To L-1
s[n]=range(48,57)
Next
#endmacro
#macro compare(n1,n2,ans)
Scope
Var lenn1=Len(n1),lenn2=Len(n2)
If lenn1 > lenn2 Then ans=-1:Goto lbl
If lenn1 < lenn2 Then ans=0:Goto lbl
If n1 > n2 Then ans = -1 Else ans= 0
lbl:
End Scope
#endmacro
Dim As Long L=Len(s1),ans=1
Dim As String s=String(L,0)
While ans
GetNumber
compare(s,s1,ans)
Wend
Return Ltrim(s,"0")
End Function
Function Get64Bit() As UlongInt
Dim As Ulongint a, b
a = (Cast( Ulongint, Rnd*(2^32) ) Shl 32) Or Cast( Ulongint, Rnd*(2^32) )
b = (Cast( Ulongint, Rnd*(2^32) ) Shl 32) Or Cast( Ulongint, Rnd*(2^32) )
Return a Xor b
End Function
dim as double t
dim as ulongint u=-1,v
dim as string su=str(u)
dim as string s
print u
randomize ,2
t=timer
for n as long=1 to 1000000
s=rndX(su)
next
print s, timer-t
'======================
sleep 100
randomize ,5
t=timer
for n as long=1 to 1000000
v=Get64Bit()
next
print v,timer-t
sleep
Code: Select all
18446744073709551615
14351978296743188418 0.8591712197521702
750512437885913434 12.63822316541337