Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc//std/random

Es gibt im MG zwei Quellen von Pseudo-Zufallszahlen.

1) random()
  Diese efun liefert eine Zufallszahl aus dem Pseudo-Zufallszahlengenerator
  (PRNG) des Drivers. (s. Manpage).
  Wenn keine besonderen Gruenden vorliegen, sollte immer diese verwendet
  werden.


2) /std/util/rand-glfsr.c
  Falls jemand aus irgendeinem Grund eine Sequenz von Pseudo-Zufallszahlen
  braucht, die spaeter reproduzierbar sein soll (d.h. der Seed muss
  konfigurierbar sein), gibt es unter /std/util/rand-glfsr.c einen simplen,
  nicht allzu guten und sehr ineffizienten Pseudo-Zufallszahlengenerator.

Interface:
* public varargs void init(int seed, int newp)
  Setzt das Seed (und das Erzeugungspolynom, wenn gewuenscht, wovon ich
  aber abraten wuerde). Der Seed darf nicht 0 sein.
* public void InitWithUUID(string uuid)
  Berechnet einen Seed aus der uuid und initialisiert den PRNG damit (und dem
  Default-Polynom).
* public int nextbit()
  Liefert ein zufaelliges Bit (also 0 oder 1).
* public int nextbits(int count)
  Liefert  Bits (max 64) in einem int.
* public int random(int n)
  Liefert eine Zufallszahl zwischen 0 und n-1, in welcher 32 bits an 
  Pseudozufall stecken.
  Das Seed von der Blueprint wird vermutlich staendig veraendert (d.h.
  verlasst euch nicht drauf, dass es konstant bleibt), wollt ihr eine
  'private' Instanz mit eurem Seed, clont das Objekt (aber verliert den Clone
  nicht).

  Und um es nochmal zu sagen:
  Die IMHO einzige sinnvolle Anwendung ist, wenn man aus irgendeinem Grund
  das seed selber waehlen muss, damit man die Sequenz von Pseudozufall immer
  wieder reproduzieren kann.
  In allen anderen Faellen nehmt besser das random() vom Driver.

Der PRNG benutzt ein Linear Feedback Shift Register (in Galois-Variante). Die
Periodenlaenge des per Default benutzten Erzeugngspolynoms ist 2^32 - 1, d.h.
nach 4294967295 Bits wiederholt sich die Sequenz.
Das Default-Polynom ist:
x^32 + x^31 + x^28 + x^27 + x^24 + x^23 + x^20 + x^19 + x^16 + x^15 + x^12
     + x^11 + x^8 + x^7 + x^5 + x^3 + 1
(Zahlenwert: 0x1999999a8)

Wer ein anderes Polynom will, kann das per init() konfigurieren, sollte sich
aber schlau machen, welche sinnvoll nutzbar sind.


Ein paar statistische Daten eines Stroms von 40960 Bits:
Value Char Occurrences Fraction
  0            20474   0.499854
  1            20486   0.500146

Total:         40960   1.000000

Entropy = 1.000000 bits per bit.

Optimum compression would reduce the size
of this 40960 bit file by 0 percent.

Chi square distribution for 40960 samples is 0.00, and randomly
would exceed this value 95.27 percent of the times.

Arithmetic mean value of data bits is 0.5001 (0.5 = random).
Monte Carlo value for Pi is 3.109026964 (error 1.04 percent).
Serial correlation coefficient is -0.008399 (totally uncorrelated = 0.0).


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.