Code: Alles auswählen
; Modulo Beschleuniger für x % const(2^n)
Macro fastmod(_res, _num, _mod)
CompilerIf Defined(__fm_mod, #PB_Variable) = #False
Define.i __fm_mod, __fm_num, __fm_tmp
CompilerEndIf
__fm_mod = (_mod) - 1
__fm_num = _num
__fm_tmp = __fm_num & __fm_mod
If __fm_num < 0
If __fm_tmp
_res = (__fm_tmp | ~__fm_mod)
Else
_res = 0
EndIf
Else
_res = __fm_tmp
EndIf
EndMacro
#n = 100000000
t = ElapsedMilliseconds()
For i = 1 To #n
x = i%8
Next
t1 = ElapsedMilliseconds()-t
t = ElapsedMilliseconds()
For i = 1 To #n
fastmod(x, i, 8)
Next
t2 = ElapsedMilliseconds()-t
MessageRequester("","native: " + t1 + " ms" + Chr(13) +"fastmod: " + t2 + " ms")