Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

drand48(3C)

rand(3C)

srand(3C)

stdlib(5)

random(3)               (BSD Compatibility Package)               random(3)

NAME
     random, srandom, initstate, setstate - Funktionen für Pseudo-Zufalls-
     zahlen

SYNTAX
     #include <stdlib.h>

     long random(void);

     void srandom(unsigned int seed);

     char *initstate(unsigned int seed, char *state, sizet size);

     char *setstate(const char *state);

BESCHREIBUNG
     Die Funktion random() verwendet einen nichtlinearen, additiven
     Feedback-Zufallszahlengenerator und setzt ein Standard-Status-Array
     mit der Größe von 31 langen Ganzzahlen (Long Integer) ein, um aufein-
     anderfolgende Pseudo-Zufallszahlen im Bereich von 0 bis (2^31)-1 zu
     generieren. Die Periode dieses Zufallszahlengenerators liegt etwa bei
     16*((2^31)-1). Die Größe des Status-Arrays bestimmt die Periode des
     Zufallszahlengenerators. Wird die Größe des Arrays heraufgesetzt, ver-
     größert sich auch die Periode.

     Mit 256 Bytes Statusinformationen ist die Periode des Zufallszahlenge-
     nerators größer als 2^69.

     Wie auch rand(), generiert random() standardmäßig eine Zahlenfolge,
     die dupliziert werden kann, indem srandom() mit 1 als Startwert aufge-
     rufen wird.

     Die Funktion srandom() initialisiert das aktuelle Status-Array mit dem
     Wert von seed.

     Die Funktionen initstate() und setstate() dienen zum Neustarten und
     Ändern von Zufallszahlengeneratoren. Mit der Funktion initstate() kann
     ein Status-Array, auf das das Argument state zeigt, zur späteren Ver-
     wendung initialisiert werden. Anhand des Arguments size, das die Größe
     des Status-Arrays in Bytes angibt, bestimmt initstate(), welcher Typ
     von Zufallszahlengeneratoren verwendet werden soll; je größer das
     Status-Array, desto höher ist der Zufallsgrad der Zahlen. Werte für
     die Anzahl der Statusinformationen sind 8, 32, 64, 128 und 256 Bytes.
     Andere Werte über 8 Bytes werden jeweils auf den nächst niedrigeren
     der genannten Werte gerundet. Bei Werten größer als oder gleich 8 oder
     kleiner als 32 verwendet random() einen einfachen linearen kongruenten
     Zufallszahlengenerator. Das Argument seed gibt den Startwert für die
     Zufallszahlenfolge an, der auch als Ausgangswert für einen Neustart
     dient. Die Funktion initstate() gibt einen Zeiger auf das vorherige
     Array mit Statusinformationen aus.





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

random(3)               (BSD Compatibility Package)               random(3)

     Wurde initstate() nicht aufgerufen, verhält sich random() so, als wäre
     initstate() mit dem Startwert seed = 1 und der Größe size = 128 aufge-
     rufen worden.

     Wird initstate() mit size >= 8 und < 32 aufgerufen, verwendet random()
     einen einfachen linearen kongruenten Zufallszahlengenerator.

     Nachdem ein Status initialisiert wurde, ermöglicht setstate() ein
     Wechseln zwischen den Status-Arrays. Das durch das Argument state
     definierte Array wird für die Generierung weiterer Zufallszahlen bis
     zum nächsten Aufrufen von initstate() oder setstate() verwendet. Die
     Funktion setstate() gibt einen Zeiger auf das vorherige Status-Array
     aus.

BEISPIEL
     /* Ein Array initialisieren und an initstate uebergeben */

     static long state1[32] = {
          3,
          0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342,
          0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd,
          0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86,
          0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7,
          0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc,
          0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb,
          0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b,
          0xf5ad9d0e, 0x8999220b, 0x27fb47b9
          };

     main()
     {
          unsigned seed;
          int n;

          seed = 1;
          n = 128;
          initstate(seed, state1, n);

          setstate(state1);
          printf("%d0,random());
     }

RÜCKGABEWERT
     Die Funktion random() gibt die generierte Pseudo-Zufallszahl zurück.

     Die Funktion srandom() gibt keinen Wert zurück.

     Bei erfolgreicher Ausführung geben initstate() und setstate() einen
     Zeiger auf das vorherige Status-Array zurück. Andernfalls wird ein
     Nullzeiger zurückgegeben.




Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

random(3)               (BSD Compatibility Package)               random(3)

     Wird die Funktion initstate() mit einer Größe kleiner als 8 aufgeru-
     fen, gibt sie NULL zurück.

FEHLER
     Es sind keine Fehler definiert.

ANWENDUNGSZWECK
     Es gibt zwei Möglichkeiten, ein Status-Array nach der Initialisierung
     an einem anderen Punkt neu zu starten:

     -  Es kann die Funktion initstate() verwendet werden, um den Start-
        wert, das Status-Array und die Größe des Arrays festzulegen.

     -  Es kann zuerst die Funktion setstate() mit dem gewünschten Status
        und anschließend die Funktion srandom() mit dem gewünschten Start-
        wert verwendet werden. Der Vorteil bei der Verwendung beider Funk-
        tionen liegt darin, daß die Größe des Status-Arrays nach der
        Initialisierung nicht gesichert werden muß.

     Es gibt zwar Implementierungen von random(), bei denen Meldungen auf
     die Standard-Fehlerausgabe geschrieben werden, diese Implementierungen
     entsprechen jedoch nicht dem vorliegenden Dokument.

SIEHE AUCH
     drand48(3C), rand(3C), srand(3C), stdlib(5).





























Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026