Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

rand(3C)

drand48(3C)                                                     drand48(3C)

NAME
     drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48,
     lcong48 - Gleichmäßig verteilte Pseudo-Zufallszahlen erzeugen

SYNTAX
     #include <stdlib.h>

     double drand48(void);

     double erand48(unsigned short int xsubi[3]);

     long int lrand48(void);

     long int nrand48(unsigned short int xsubi[3]);

     long int mrand48(void);

     long int jrand48(unsigned short int xsubi[3]);

     void srand48(long int seedval);

     unsigned short int *seed48(unsigned short int seed16v[3]);

     void lcong48(unsigned short int param[7]);

BESCHREIBUNG
     Diese Familie von Funktionen erstellt Pseudo-Zufallszahlen unter
     Anwendung des bekannten linearen Kongruenzalgorithmus und der 48-Bit-
     Ganzzahlarithmetik.

     Die Funktionen drand48() und erand48() liefern nichtnegative Gleitkom-
     mazahlen doppelter Genauigkeit, die gleichmäßig über das Intervall
     [0.0, 1.0] verteilt sind.

     lrand48() und nrand48() liefern nichtnegative Ganzzahlen vom Typ long,
     die gleichmäßig über das Intervall [0, 2^31) verteilt sind.

     Die Funktionen mrand48() und jrand48() liefern ganze Zahlen vom Typ
     long mit Vorzeichen, die gleichmäßig über das Intervall [-2^31, 2^31)
     verteilt sind.

     Die Funktionen srand48(), seed48() und lcong48() sind Funktionen für
     die Initialisierung; eine dieser Funktionen ist aufzurufen, bevor ent-
     weder drand48(), lrand48() oder mrand48() aufgerufen wird. Standardan-
     fangswerte werden automatisch eingesetzt, wenn drand48(), lrand48()
     oder mrand48() ohne vorherigen Aufruf einer Initialisierungsfunktion
     aufgerufen werden; Sie sollten aber explizit initialisieren. Für die
     Funktionen erand48(), nrand48() und jrand48() ist ein vorheriger Auf-
     ruf einer Initialisierungsfunktion nicht erforderlich.

     Bei allen Funktionen wird eine Folge von ganzzahligen 48-Bit-Werten
     X sub i auf Grundlage der linearen Kongruenzformel erstellt:



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

drand48(3C)                                                     drand48(3C)

     (vgl. Referenzhandbuch für Programmierer)

              X sub{n+1} = (aX sub n + c) sub{ mod m}        n>=0

     Der Parameter m ist 2^48; folglich wird ganzzahlige 48-Bit-Arithmetik
     ausgeführt. Wenn lcong48() nicht aufgerufen wurde, erhält man den Mul-
     tiplikatorwert a und den Summand c durch:

           a = 5DEECE66D sub 16 = 273673163155 sub 8

           c = B sub 16 = 13 sub 8

     Der von einer der Funktionen drand48(), erand48(), lrand48(),
     nrand48(), mrand48() oder jrand48() gelieferte Wert wird berechnet,
     indem man erst das nächste 48-Bit X sub i in der Folge berechnet. Dann
     wird die entsprechende Bitanzahl, die jeweils vom Typ des zurückzuge-
     benden Datenelements abhängt, von den links stehenden höherwertigen
     Bits X sub i kopiert und in den Rückgabewert umgewandelt.

     Die Funktionen drand48(), lrand48() und mrand48() speichern das
     zuletzt erzeugte 48-Bit X sub i in einem internen Puffer. X sub i muß
     vor Aufruf initialisiert werden. Für die Funktionen erand48(),
     nrand48() und jrand48() muß Speicherplatz vom aufrufenden Programm für
     die aufeinanderfolgenden X sub i-Werte in dem Feld bereitgestellt wer-
     den, das beim Aufrufen der Funktionen als Argument angegeben wurde.
     Diese Funktionen müssen nicht initialisiert werden; das aufrufende
     Programm muß den gewünschten Anfangswert von X sub i in das Feld
     schreiben und als Argument übergeben. Durch die Verwendung verschiede-
     ner Argumente ermöglichen die Funktionen erand48(), nrand48() und
     jrand48() separaten Modulen eines großen Programms die Erzeugung meh-
     rerer unabhängiger Mengen von Pseudo-Zufallszahlen, d. h. die Folge
     der Zahlen in einer Menge hängt nicht davon ab, wie oft diese Funktion
     aufgerufen wurde, um Zufallszahlen für die anderen Mengen zu erzeugen.

     Die Initialisierungsfunktion srand48() setzt die 32 höherwertigen Bits
     von X sub i auf die in ihrem Argument enthaltenen 32 Bits. Die nieder-
     wertigen 16 Bits von X sub i werden auf den Wert 330E sub 16 gesetzt.

     Die Initialisierungsfunktion seed48() setzt den Wert von X sub i auf
     den 48-Bit-Wert, der im Argumentfeld angegeben wurde. Außerdem wird
     der vorherige Wert von X sub i in einen internen 48-Bit-Speicher
     kopiert, der nur von seed48() benutzt wird. Ein Zeiger auf diesen Puf-
     fer ist der von seed48() zurückgegebene Wert. Dieser zurückgegebene
     Zeiger kann einfach ignoriert werden, wenn er nicht benötigt wird. Er
     ist jedoch nützlich, wenn ein Programm später einmal von einem
     bestimmten Punkt aus neugestartet werden soll. Verwenden Sie den Zei-
     ger, um auf den letzten X sub i-Wert zu gehen und diesen Wert zu spei-
     chern. Verwenden Sie den Wert dann zum Neuinitialisieren über
     seed48(), wenn das Programm neugestartet wird.

     Die Initialisierungsfunktion lcong48() ermöglicht dem Anwender die
     Angabe des anfänglichen X sub i, des Multiplikatorwerts a und des


Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

drand48(3C)                                                     drand48(3C)

     Summanden c. Die Argumentfeldelemente param[0-2] geben X sub i an,
     param[3-5] geben den Multiplikator a und param[6] den 16-Bit-Summanden
     c an. Nach dem Aufruf von lcong48() werden die oben angegebenen Werte
     für "Standard"-Multiplikator und Summand, d. h. a und c, mit einem
     anschließenden Aufruf von entweder srand48() oder seed48() wieder her-
     gestellt.

SIEHE AUCH
     rand(3C).













































Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

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