
Simple procedure to know if a number is odd.
Code: Select all
Procedure Odd(Number.l)
ProcedureReturn Mod(Number,2)
EndProcedure
Debug Odd(7)
Debug Odd(20)
Code: Select all
Procedure Odd(Number.l)
ProcedureReturn Mod(Number,2)
EndProcedure
Debug Odd(7)
Debug Odd(20)
Code: Select all
Procedure Odd(n)
ProcedureReturn n & 1
EndProcedure
Code: Select all
Macro ODD (n)
(n & 1)
EndMacro
Hi Luis, thanks for teaching me another way to do it.luis wrote:Or (no function call)
Code: Select all
Procedure Odd(Number) ProcedureReturn Number & 1 EndProcedure
Code: Select all
Procedure Odd(Number)
ProcedureReturn Number & 1
EndProcedure
Procedure TOdd(Number.l)
ProcedureReturn Mod(Number,2)
EndProcedure
StartTime = ElapsedMilliseconds()
For p=0 To 100000
TOdd(p)
Next p
ElapsedTime = ElapsedMilliseconds()-StartTime
Debug "minimy: "+StrU(ElapsedTime)
StartTime = ElapsedMilliseconds()
For p=0 To 100000
Odd(p)
Next p
ElapsedTime = ElapsedMilliseconds()-StartTime
Debug "Luis: "+StrU(ElapsedTime)
Code: Select all
CompilerIf (#PB_Compiler_Debugger = 1)
CompilerError "Disable Debugger"
CompilerEndIf
Procedure Bitw_Odd(n)
ProcedureReturn n & 1
EndProcedure
Macro Macro_ODD (n)
(n & 1)
EndMacro
Procedure Mod_Odd (n)
ProcedureReturn Mod(n,2)
EndProcedure
#times = 500000000
StartTime = ElapsedMilliseconds()
For p=0 To #times
i = Mod_Odd(p)
Next p
ElapsedTime = ElapsedMilliseconds()-StartTime
MessageRequester("Module: ", StrU(ElapsedTime))
StartTime = ElapsedMilliseconds()
For p=0 To #times
i = Bitw_Odd(p)
Next p
ElapsedTime = ElapsedMilliseconds()-StartTime
MessageRequester("bitwise & in proc: ", StrU(ElapsedTime))
StartTime = ElapsedMilliseconds()
For p=0 To #times
i = Macro_ODD(p)
Next p
ElapsedTime = ElapsedMilliseconds()-StartTime
MessageRequester("bitwise & in macro :", StrU(ElapsedTime))
using number & 1 in a macro (instead of a proc) will be the fastest, and most likely a smaller exe size.minimy wrote: What is the right way?
The macro is also be limited to only testing integers. The procedure is better if both integers and floats need to be tested because of the automatic type conversion.Tenaja wrote:using number & 1 in a macro (instead of a proc) will be the fastest, and most likely a smaller exe size.minimy wrote: What is the right way?