I just need to know if the number "n" is even or not.
Here on my computer the last option "n & 1" is the fastest, does anyone have an idea to speed it up?
See:
Code: Select all
DisableDebugger
Define.i i,n,e
; the value of n will never be greater than 99
t1 = ElapsedMilliseconds(): RandomSeed(0): e=0
For i=1 To 20000000
n=Random(99,0): If Not Val(Right(Bin(n),1)): e+1: EndIf
Next
Result$+"Bin(n) = "+Str(i-1)+" in "+StrF((ElapsedMilliseconds()-t1),0)+" ms even="+Str(e)+Chr(13)
t1 = ElapsedMilliseconds(): RandomSeed(0): e=0
For i=1 To 20000000
n=Random(99,0): If Not Mod(n,2): e+1: EndIf
Next
Result$+"Mod(n,2) = "+Str(i-1)+" in "+StrF((ElapsedMilliseconds()-t1),0)+" ms even="+Str(e)+Chr(13)
t1 = ElapsedMilliseconds(): RandomSeed(0): e=0
For i=1 To 20000000
n=Random(99,0): If Not n % 2: e+1: EndIf
Next
Result$+"n % 2 = "+Str(i-1)+" in "+StrF((ElapsedMilliseconds()-t1),0)+" ms even="+Str(e)+Chr(13)
t1 = ElapsedMilliseconds(): RandomSeed(0): e=0
Dim even.i(99): For i=0 To 99: even(i)=1-Mod(i,2): Next
For i=1 To 20000000
n=Random(99,0): If even(n): e+1: EndIf
Next
Result$+"even(n) = "+Str(i-1)+" in "+StrF((ElapsedMilliseconds()-t1),0)+" ms even="+Str(e)+Chr(13)
t1 = ElapsedMilliseconds(): RandomSeed(0): e=0
For i=1 To 20000000
n=Random(99,0)+1: If n & 1: e+1: EndIf
Next
Result$+"n & 1 = "+Str(i-1)+" in "+StrF((ElapsedMilliseconds()-t1),0)+" ms even="+Str(e)+Chr(13)
EnableDebugger
Debug Result$