Pseudo-Zufallszahl in bestimmtem Bereich erzeugen <SPIN>

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
schnipsel/sonst2.txt · Zuletzt geändert: 04.11.2011 08:36 von kuroneko
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: GNU Free Documentation License 1.3
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki