Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Macro DifVar(Z1, Z2)
((Z1>Z2)*Z1)+((Z2>Z1)*Z2)-(((Z2>Z1)*Z1)+((Z1>Z2)*Z2))
EndMacro
Procedure DifVarProc(Z1, Z2)
If Z1>Z2
ProcedureReturn Z1-Z2
Else
ProcedureReturn Z2-Z1
EndIf
EndProcedure
ST = GetTickCount_()
For i = 1 To 100000
s = DifVar(20, 10)
s = DifVar(5, 15)
Next i
Debug "Zeit: "+Str(GetTickCount_()-ST)+"ms"
Debug "Resultate: "
Debug DifVar(20, 10)
Debug DifVar(5, 15)
Debug ""
ST = GetTickCount_()
For i = 1 To 100000
s = DifVarProc(20, 10)
s = DifVarProc(5, 15)
Next i
Debug "Zeit: "+Str(GetTickCount_()-ST)+"ms"
Debug "Resultate: "
Debug DifVarProc(20, 10)
Debug DifVarProc(5, 15)
PB Debugger sagt: hat geschrieben:Zeit: 16ms
Resultate:
10
10
Hintergrund:
Abs() ist zwar nur für Floats geeignet, aber da ein Ausdruck übergeben wird, wird der auf Float gecastet.
man muss hier nur drauf achten, dass die Differenz auch in eine Float reinpasst.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Btw in anderen Programmiersprachen kennt man deine Funktion ("CutVal") unter dem Namen clamp(value, min, max).
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.