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.
Mal ein ganz kleiner Code-Schnipsel, aber doch sehr praktisch (zumindest für mich im Moment). 2 Kleine Macros um den Logarithmus einer Zahl zur Basis 2 zu berechnen und ein Macro um zu Überprüfen ob eine Zahl eine Potenz von 2 ist. Ich brauche das gerade in meinem ByteCode-Compiler um Divisionen und Multiplikationen durch Potenzen von 2 automatisch durch Bit-Shift Befehle ersetzen zu können.
Procedure IsPowOf2(TestVal.d) ;der Testwert wird der Procedure als Double übergeben
Double.q = PeekQ(@TestVal) & $7FFFFFFFFFFFFFFF ;Vorzeichen-Bit ausblenden (Bit 63)
Exp.q = Double >> 52 ;Exponent = Bits 52 bis 62 (11 Bits)
Man.q = Double & $FFFFFFFFFFFFF ;Mantisse = Bits 0 bis 51 (52 Bits)
If Man = $FFFFFFFFFFFFF ;also fast 1
Man = 0 ;kann zu Null aufgerundet werden; ist ja Aufaddierung
Res = 1 ;Exponent dafür um eins erhöhen
EndIf
If Double = 0 Or Man <> 0
Res = #False ;Null
Else
Res + Exp + #True ;Res mit Bias (1023 für Double), für #True evtl. besser 1
EndIf
ProcedureReturn Res
EndProcedure
;Testwerte
Res = IsPowOf2(1.3079939052566739757e+297)
;Res = IsPowOf2(1025)
;Res = IsPowOf2(1024.000000000001)
;Res = IsPowOf2(1024.000000000000)
;Res = IsPowOf2(1)
;Res = IsPowOf2(0)
;Res = IsPowOf2(0.0625)
If Res
Res$ = "Ja, der Exponent ist " + Str(Res - 1024) ;1024 = Bias + 1 (#True)
Else
Res$ = "Nein"
EndIf
MessageRequester("Is Power of 2 ?", Res$)