Hier mal mein Beitrag zum Thema 'Programmier Tipps und Tricks':
______
Viele mühen sich immer ab, wenn sie eine Zufallszahl in einem bestimmten bereich und dann auch noch eine bestimmte dichte haben wollen, dieses Macro sollte dies vereinfachen:
[RandomArea] hat geschrieben:
Macro RandomArea(StartValue, EndValue, StepValue=1)
( Random(Int(((EndValue)-(StartValue))/(StepValue)))*(StepValue)+(StartValue) )
EndMacro
Beispiele:
Zitat:
Debug RandomArea(10, 20)
; Ganzzahlige Zufallszahlen von 10 bist 20 (beide eingeschlossen)
; 15, 19, 10, 13, 20
Debug RandomArea(-1.0, 1.0, 0.1)
; Zufallszahlen von -1 bist 1 (beide eingeschlossen) in 0.1er Abstand
; (rund) 0.3, -0.7, -1.0, 0.6, 0.0
______
Auch die Modulo-Funktion (Rest beim Dividieren, in PB das %) könnte man auch mal bei nicht Ganzzahligen Werten gebrauchen:
Zitat:
Macro ModF(Value, Factor)
( Value-Int(Value/Factor)*Factor )
EndMacro
Beispiele:
Zitat:
Debug ModF(0.7, 0.3) ; Ergebnis (rund) 0.1
Debug ModF(13.6, 6.1) ; Ergebnis (rund) 1.4
Natürlich sind die Werte bei Floats nicht immer ganz genau!
Bemerkung:
Den Modulo einer Fließkommazahl zu nehmen ist frei erfunden,
und mathematisch nicht eindeutig definiert.
Meine Funktion ModF() ermittelt den Differenzanteil (des Divisors),
zwischen der abgerundeten Division zweier Fließkommazahlen
und der reellen Division.
Beispiel:
Int(10.7/3.3) ergibt als ganzzahliges Ergebnis 3,
die reelle Division 10.7/3.3 ergibt die Fließkommazahl 3,242424...
Die Differenz ist also 0.242424...,
dass heißt der Divisor 3.3 passt also noch 0.242424 mal in den Dividend.
0.242424 * 3.3 ist 0.8
Der "Rest" dieser Division ist also 0.8, denn
10.7 = 3*3.3 + 0.8