Left Up Right

wuerfel(3)

wuerfel - Klassenhierachie zur Erzeugung von Zufallszahlen einer bestimmten Verteilung

SYNOPSIS

#include<wuerfel.h>

typedef enum { Unbk,Uniform,Det,Exponential,Erlang,Normal,Emp} Verttyp;

class Verteilung
{
public:
  Verteilung();
  Verteilung(long seedval) ;  
  virtual double zufall()=0;
  int typ() ;
  virtual int scan(char *str)=0;
};

class Uniformvert : public Verteilung
{
public:
  Uniformvert();
  Uniformvert(double A,double B);
  Uniformvert(double A,double B,long seedval);
  void init(double A,double B) ;
  double zufall();
  int scan(char *str); 
};

class Detvert : public Verteilung
{
public:
  Detvert();
  Detvert(double W);
  void init(double W);
  double zufall();
  int scan(char *str);
};

class Exponentialvert : public Verteilung
{
public:
  Exponentialvert() ;
  Exponentialvert(double Lambda) ;
  Exponentialvert(double Lambda,long seedval);
  void init(double Lambda);
  double zufall();
  int scan(char *str);
};

class Erlangvert : public Verteilung
{
public:
  Erlangvert() ;
  Erlangvert(int K,double Lambda) ;
  Erlangvert(int K,double Lambda,long seedval);
  void init(int K,double Lambda);
  double zufall();
  int scan(char *str);
};

class Normalvert : public Verteilung
{
public:
   Normalvert() ;
   Normalvert(double Mue,double Sigma) ;
   Normalvert(double Mue,double Sigma,long seedval);
   void init(double Mue,double Sigma);
   double zufall();
   int scan(char *str);
};

class Empvert : public Verteilung
{
public:
  Empvert();
  Empvert(char *datname);
  ~Empvert();
  void init(char *datname);
  int scan(char *datname);
  double zufall();
};

Verteilung *lesevert(char *str);
Verttyp testvert(char *str,char **ptr); 

Die gemeinsamen Operationen der Verteilungsklassen

Die Klasse Verteilung ist die Oberklasse aller Verteilungen.

Alle Verteilungen haben eine Operation zufall die eine Zufallszahl erzeugt sowie eine Operation scan die eine Verteilungsklasse mit dem Namensstring (z.B U(0.5,2.7) fuer die Uniforme Verteilung im Intervall [a,b) ) initialisert. Diese Operation liefert 0 falls streine gueltige Verteilungsbeschreibung ist, andernfalls einen Wert ungleich 0.

Die Operation typ liefert den Typ der Verteilung, die mit dem Aufzaehltyp Verttyp beschrieben wird.

Bemerkung zur Erzeugung der Zufallszahlen

Die Klassen erzeugen aus einer U(0,1)-verteiten Zufallszahl die Zufallszahlen der entsprechenden Verteilung. Die U(0,1)-Zufallszahlen werden mit drand48(3) erzeugt. Die Initialiserung des Zufallszahlengenerators mit der Funktion srand48(3) erfolgt im Konstruktor. Wird eine Konstruktor mit dem Parameter seedvalaufgerufen, wird dieser srand48(3) weitergegeben. Ansonsten wird srand48(3) mit dem Sekundenwert, der mit gettimeofday(2) ermittelt wird, aufgerufen.

Die konkreten Verteilungen koennen entweder mit ihrem Konstruktor,der Operation init oder der Operation scan initialisiert werden.

Bei der empirischen Verteilung Empvert wird als Parameter bei den Konstruktoren und Operationen init und scan ein Name einer empirischen Dichtefunktionsdatei (vgl. emp(5)) uebergeben. Die Datei wird eingelesen und intern aufintegriert. Ist das Integral > 1.0 so liegt keine Dichte vor, und eine Fehlermeldung wird ausgegeben. Im Fall, das das Integral <= 1 ist, dann wird das korrigiert.

Sonstige Funktionen

Die Funktion lesevert liest den '\0'-Terminierten String strund liefert einen Zeiger auf eine Instanz der bestimmten Verteilungsklasse. Falls strkeine gueltige Verteilung beschreibt, wird der NULL- Zeiger zurueckgeliefert. Die Funktion testvert liest den '\0'-Terminierten String strund liefert den Typ der entsprechenden Verteilung bzw. den Typ Unbk falls es keine Verteilung mit diesem Namen gibt. ptrzeigt auf einen Zeiger. Ist dieser Parameter ungleich NULL, so zeigt der Zeiger auf das erste Zeichen nach dem Verteilungsbezeichnung. Dies ist als Hilfsmittel zur Syntaxanalyse gedacht.

Siehe auch

emp(5),wuerfel(1),drand48(3),giant(1)

Quellenangabe

Diese Klasse stammt ursprünglich aus der Diplomarbeit von Ronald Lange im Rahmen siner Diplomarbeit am IMMD IV im zusammenhang des GIANT-Projekts zur Analyse Stochastischer Serienparaleller Graphen
Informatik- und Netzwerkverein Ravensburg e.V Rudolf Weber