Liefert Zufallszahl (Pseudo) zwischen Startwert und Endwert-1
PUB rand(start,end) | rnd, dummy rnd := (dummy? >> start) ** (end << 1) return rnd
[kuroneko] Ich hab' hier so meine Zweifel. Angenommen ich moechte Zahlen zwischen 31 und 42, (dummy? » start) ist dann entweder 0 oder 1, multipliziert mit einem beliebigen 32bit-Wert liefert immer 0 ((end « 1) positiv, e.g. 84 = 42 « 1) oder -1 ((end « 1) negativ) zurueck fuer diese Operation.
Aufruf:
zufall := rand(1,7) 'liefert Zahl zwischen 1 und 6
Um zufälligere Zufallszahlen (… die Welt der Zahlen ist schon eigenartig) zu erzeugen, kann man den „seed“-Wert setzen.
Zufällig genug für Spiele ist z.B. das „cnt“-Register, also der Systemcounter
Man kann die obige Routine jetzt so verändern:
PUB rand(start,end,seed) | rnd rnd := (seed? >> start) ** (end << 1) return rnd
Aufruf:
brutaler_zufall := cnt zufall := rand(1,7,brutaler_zufall) 'liefert Zahl zwischen 1 und 6
Wenn man immer die gleiche Reihe an Zufallszahlen benötigt, kann man auch einen Festwert eintragen:
zufall := rand(1,7,42) 'liefert Zahl zwischen 1 und 6